J’écris une fonction de recherche et j’ai pensé à cette requête en utilisant des parameters pour empêcher, ou du moins limiter, les attaques par injection SQL. Cependant, quand je le lance dans mon programme, il ne retourne rien:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Les parameters peuvent-ils être utilisés comme ça? ou sont-ils uniquement valables dans un cas tel que:
SELECT * FROM compliance_corner WHERE body LIKE '%%'
(où est l’object de recherche).
EDIT: Je construis cette fonction avec VB.NET, cela a-t-il un impact sur la syntaxe à laquelle vous avez consortingbué?
J’ai également exécuté cette instruction dans SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE
% max% ‘) `et qui renvoie des résultats.
Votre code visuel de base ressemblerait à ceci:
Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')") cmd.Parameters.Add("@query", searchSsortingng)
Eh bien, j’irais avec:
Dim cmd as New SqlCommand( "SELECT * FROM compliance_corner"_ + " WHERE (body LIKE @query )"_ + " OR (title LIKE @query)") cmd.Parameters.Add("@query", "%" +searchSsortingng +"%")
tu dois faire:
LIKE '%' + @param + '%'
Vous devrez peut-être concaténer les signes% avec votre paramètre, par exemple:
LIKE ‘%’ || @query || ‘%’
Edit: En fait, cela n’a aucun sens. Je pense que j’ai peut-être mal compris votre problème.
Parfois, le symbole utilisé comme espace réservé %
n’est pas le même si vous exécutez une requête à partir de VB que lorsque vous l’exécutez à partir de MS SQL / Access. Essayez de changer votre symbole d’espace réservé de %
à *
. Cela pourrait fonctionner.
Toutefois, si vous déboguez et souhaitez copier votre chaîne SQL directement dans MS SQL ou Access pour la tester, vous devrez peut-être remplacer le symbole par %
dans MS SQL ou Access afin de renvoyer des valeurs.
J’espère que cela t’aides
essayez aussi de cette façon
Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE CONCAT('%',@query,'%') OR title LIKE CONCAT('%',@query,'%') )") cmd.Parameters.Add("@query", searchSsortingng) cmd.ExecuteNonQuery()
Concat utilisé au lieu de +