Maison > Article > développement back-end > Pourquoi dois-je échapper les barres obliques différemment dans 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!