78 votes

Comment faire ? Paramètres et instruction LIKE SQL

J'écris une fonction de recherche, et j'ai pensé à cette requête en utilisant des paramètres pour prévenir, ou du moins limiter, les attaques par injection SQL. Cependant, lorsque je l'exécute dans mon programme, elle ne renvoie rien :

SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')

Les paramètres peuvent-ils être utilisés de cette manière ? ou sont-ils uniquement valables dans une instance telle que :

SELECT * FROM compliance_corner WHERE body LIKE '%<string>%' (où <string> est l'objet de la recherche).

EDIT : Je construis cette fonction avec VB.NET, cela a-t-il un impact sur la syntaxe que vous avez utilisée ?

Aussi, j'ai exécuté cette déclaration dans le serveur SQL : SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE %max%')` et cela renvoie des résultats.

112voto

James Curran Points 55356

Eh bien, je dirais :

 Dim cmd as New SqlCommand(
 "SELECT * FROM compliance_corner"_
  + " WHERE (body LIKE @query )"_ 
  + " OR (title LIKE @query)")

 cmd.Parameters.Add("@query", "%" +searchString +"%")

78voto

John Points 5492

Votre code de base visuel ressemblerait à quelque chose comme ceci :

Dim cmd as New SqlCommand("SELECT * FROM compliance_corner WHERE (body LIKE '%' + @query + '%') OR (title LIKE '%' + @query + '%')")

cmd.Parameters.Add("@query", searchString)

25voto

Andrew Bullock Points 14899

Vous devez faire :

LIKE '%' + @param + '%'

1voto

Will Wagner Points 1935

Vous devrez peut-être concaténer les signes % avec votre paramètre, par exemple :

LIKE '%' || @query || '%'

Modifier : En fait, ça n'a peut-être pas de sens du tout. Je pense que j'ai peut-être mal compris votre problème.

1voto

Lalie Points 11

Parfois, le symbole est utilisé comme substitut % n'est pas la même si vous exécutez une requête depuis VB que lorsque vous l'exécutez depuis MS SQL / Access. Essayez de changer votre symbole de placeholder de % a * . Ça pourrait marcher.
Cependant, si vous déboguez et que vous voulez copier votre chaîne SQL directement dans MS SQL ou Access pour la tester, il se peut que vous deviez changer le symbole à nouveau en % dans MS SQL ou Access afin de renvoyer réellement des valeurs.

J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X