Howto? Paramètres et COMME instruction SQL
Je suis en train d'écrire une fonction de recherche, et nous avons pensé de cette requête à l'aide de paramètres à prévenir, ou tout au moins de limiter les attaques par injection SQL. Cependant, quand je le lance par le biais de mon programme, il ne retourne rien:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Paramètres peuvent être utilisés comme ceci? ou sont-ils seulement valide dans un exemple comme:
SELECT * FROM compliance_corner WHERE body LIKE '%<string>%'
(où <string>
est l'objet de la recherche).
EDIT: je suis la construction de cette fonction avec VB.NET n'ont d'impact sur la syntaxe, les gars, vous avez contribué?
Aussi, j'ai couru à cette déclaration dans SQL Server: SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE
%max%')` et qui retourne des résultats.
Vous devez vous connecter pour publier un commentaire.
Votre code visual basic ressemblerait à quelque chose comme ceci:
SQL
injection, justeLIKE
injection. Cela signifie que l'utilisateur peut entrer des caractères spéciaux tels que%
^
et_
quiLIKE
interprétera spécialement. Cela signifie que l'utilisateur ne peut pas obtenir ce qu'ils attendent pour certaines recherches. Comme un exemple, une recherche pour'less than 1% fat'
peut retourner le résultat'less than 1% of doctors recommend this - it's full of fat!'
.searchString.Replace("[","[[]").Replace("%","[%]").Replace("_","[_]")
, qui avaoid COMME l'injection (tant que vous n'êtes pas à l'aide de la clause de sauvegarde).Bien, j'irais avec:
cmd.Parameters.Add
devientcmdLoad.Parameters.AddWithValue
ou est-il un problème? Je comprends que James réponse est à partir de 2008 🙂que vous avez à faire:
LIKE '%' + @param + '%'
Vous pourriez avoir à concaténer les signes % avec votre paramètre, par exemple:
LIKE '%' || @requête || '%'
Edit:
En fait, ce que ne peut faire aucun sens du tout. Je pense que j'ai peut-être mal compris votre problème.
Parfois le symbole utilisé comme un espace réservé
%
n'est pas le même si vous exécutez une requête à partir de VB lorsque vous exécutez à partir de MS SQL /Access. Essayez de modifier votre espace réservé symbole de%
à*
. Qui pourrait fonctionner.Toutefois, si vous déboguez et que vous souhaitez copier votre chaîne SQL directement dans MS SQL ou d'Accès à la tester, vous pouvez avoir à modifier le symbole du retour à
%
dans MS SQL ou d'Accès afin de pouvoir réellement les valeurs de retour.Espère que cette aide
essayez aussi de cette façon
Utilisé Concat au lieu de +