In MySQL kann die Behandlung von Slashes () in Abfragen anders sein verwirrend sein. Betrachten Sie die folgende Abfrage:
<code class="sql">(SELECT * FROM `titles` where title = 'test\') UNION ALL (SELECT * FROM `titles` where title LIKE 'test\\')</code>
Sie könnten erwarten, dass die zweite Abfrage, die die LIKE-Klausel verwendet, einen zusätzlichen Backslash erfordern würde, um den ursprünglichen Schrägstrich in „test“ zu maskieren. Die Ergebnisse zeigen jedoch, dass beide Abfragen erfolgreich dieselbe Zeile zurückgeben, mit „test“ als Titel.
Die Diskrepanz entsteht durch das Verhalten von MySQL mit Escape-Zeichen in WHERE- und LIKE-Klauseln. In der WHERE-Klausel dient der Backslash als Escape-Zeichen und verhindert, dass Sonderzeichen wörtlich interpretiert werden. Im Gegensatz dazu ist in der LIKE-Klausel der Backslash das Standard-Escape-Zeichen, mit dem Sie andere Zeichen innerhalb des Suchmusters maskieren können.
Wie im MySQL-Handbuch für LIKE angegeben:
Alternativ können Sie ein anderes Escape-Zeichen für LIKE angeben, wie in der folgenden geänderten Abfrage gezeigt:
Indem Sie den Backslash durch ein Pipe-Zeichen als Escape-Zeichen ersetzen, können Sie genau nach dem wörtlichen „Test“ suchen, ohne den Backslash zu verdoppeln.<code class="sql">SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'</code>Nach dem Login kopierenDas obige ist der detaillierte Inhalt vonWarum muss ich Schrägstriche in den WHERE- und LIKE-Klauseln von MySQL anders maskieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!