Comment puis-je échapper les caractères spéciaux dans MySQL?
Par exemple:
select * from tablename where fields like "%string "hi" %";
Erreur:
Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre versions du serveur MySQL pour la bonne syntaxe à utiliser près de "salut" "' à la ligne 1
Comment puis-je construire cette requête?
- Cela peut être dupe martelé en Comment puis-je prévenir l'injection SQL en PHP?... (je ne dis pas qu'il doit ou est bon de le faire - tout ce qui peut arriver.)
Vous devez vous connecter pour publier un commentaire.
Voir http://dev.mysql.com/doc/refman/5.0/en/string-literals.html
Si vous avez besoin
Bien que, comme Le projet de loi Karwin les notes ci-dessous, en utilisant des guillemets doubles pour les délimiteurs de chaînes n'est pas standard SQL, c'est une bonne pratique d'utiliser les guillemets simples. Cela simplifie les choses:
J'ai développé mon propre MySQL échapper à la méthode en Java (si utile pour tous).
Voir le code de la classe ci-dessous.
Avertissement: faux si NO_BACKSLASH_ESCAPES SQL-mode est activé.
Vous devez utiliser des guillemets simples pour les délimiteurs de chaînes. La seule citation est la norme SQL délimiteur de chaîne, et les guillemets sont de l'identificateur de délimiteurs (vous pouvez utiliser des mots ou de caractères dans les noms de tables ou de colonnes).
Dans MySQL, double-guillemets travail (nonstandardly) comme un délimiteur de chaîne par défaut (sauf si vous définissez
ANSI
mode SQL). Si jamais vous utilisez une autre marque de base de données SQL, vous bénéficierez d'entrer dans l'habitude de l'utilisation des citations en standard.Une autre pratique de bénéficier de l'aide de simples guillemets, c'est que le sens littéral, les guillemets doubles au sein de votre chaîne n'a pas besoin d'être échappé:
MySQL a la fonction de chaîne CITATION, et il faut résoudre ce problème:
LIKE
's%
caractère, il est assez inutileVous pouvez utiliser mysql_real_escape_string.
mysql_real_escape_string()
n'échappe pas à%
et_
, de sorte que vous devrait échapper à MySQL caractères génériques (%
et_
) séparément.Pour les chaînes comme ça, pour moi la façon la plus confortable de le faire est de doubler le " ou ", comme expliqué dans le manuel MySQL:
C'est à partir de http://dev.mysql.com/doc/refman/5.0/en/string-literals.html.
Si vous utilisez une variable lors de la recherche dans une chaîne de caractères,
mysql_real_escape_string()
est bon pour vous. Juste ma suggestion:Pour tester comment insérer des guillemets dans MySQL en utilisant le terminal, vous pouvez utiliser de la manière suivante:
Après l'insertion de la valeur que vous pouvez mettre à jour la valeur dans la base de données avec des guillemets ou des apostrophes: