Maison > développement back-end > tutoriel php > Pourquoi dois-je échapper les barres obliques différemment dans les clauses WHERE et LIKE de MySQL ?

Pourquoi dois-je échapper les barres obliques différemment dans les clauses WHERE et LIKE de MySQL ?

Barbara Streisand
Libérer: 2024-11-01 20:10:02
original
435 Les gens l'ont consulté

Why Do I Need to Escape Slashes Differently in MySQL's WHERE and LIKE Clauses?

Pourquoi échapper à Slash () différemment pour les clauses WHERE et LIKE de MySQL ?

Dans MySQL, la gestion des barres obliques () dans les requêtes peut être déroutant. Considérez la requête suivante :

<code class="sql">(SELECT * FROM `titles` where title = 'test\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\')</code>
Copier après la connexion

Vous pourriez vous attendre à ce que la deuxième requête, utilisant la clause LIKE, nécessite une barre oblique inverse supplémentaire pour échapper à la barre oblique d'origine dans "test". Cependant, les résultats montrent que les deux requêtes renvoient avec succès la même ligne, avec "test" comme titre.

La divergence est due au comportement de MySQL avec les caractères d'échappement dans les clauses WHERE et LIKE. Dans la clause WHERE, la barre oblique inverse sert de caractère d'échappement, empêchant les caractères spéciaux d'être interprétés littéralement. En revanche, dans la clause LIKE, la barre oblique inverse est le caractère d'échappement par défaut, vous permettant d'échapper d'autres caractères dans le modèle de recherche.

Comme indiqué dans le manuel MySQL pour LIKE :

Ainsi, alors que la barre oblique inverse dans "test" est automatiquement échappée lors de l'analyse de la clause WHERE, elle doit être explicitement doublé (pour "test\") pour que la clause LIKE corresponde à la séquence d'échappement prévue.

Vous pouvez également spécifier un caractère d'échappement différent pour LIKE, comme indiqué dans la requête modifiée suivante :

<code class="sql">SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'</code>
Copier après la connexion

En remplaçant la barre oblique inverse par une barre oblique inverse comme caractère d'échappement, vous pouvez rechercher avec précision le « test » littéral sans doubler la barre oblique inverse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal