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
Barbara Streisandoriginal
2024-11-01 20:10:02430parcourir

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>

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>

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!

Déclaration:
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