Backslashes in MySQL maskieren: Verwendung in WHERE- und LIKE-Klauseln
Betrachten Sie die folgende Abfrage, die nach einem Titel sucht, der einen Backslash enthält:
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
Die Ausgabe zeigt, dass der Backslash in der WHERE-Klausel nicht maskiert ist. Für die LIKE-Klausel ist jedoch ein zusätzlicher Backslash erforderlich.
Warum der Unterschied?
In MySQL fungieren Backslashes () standardmäßig als Escape-Zeichen in LIKE. Laut MySQL-Handbuch für LIKE:
"Da MySQL in Strings die C-Escape-Syntax verwendet ... müssen Sie alle '' verdoppeln, die Sie in LIKE-Strings verwenden. Um beispielsweise nach 'n' zu suchen, geben Sie Folgendes an Geben Sie es als „n“ an. Um nach „“ zu suchen, geben Sie es als „\“ an. Dies liegt daran, dass die Backslashes einmal vom Parser entfernt werden und dann noch einmal, wenn der Musterabgleich erfolgt, so dass ein einzelner Backslash übrig bleibt, der abgeglichen werden muss gegen.“
Backslashes mit Escapezeichen versehen
MySQL bietet jedoch die Möglichkeit, das Escape-Zeichen mithilfe des Schlüsselworts ESCAPE zu ändern. Die folgende Abfrage würde beispielsweise ein Pipe-Zeichen (|) als Escape-Zeichen verwenden:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
Bei dieser Abfrage ist nur ein einziger Backslash in der LIKE-Klausel erforderlich, da das Pipe-Zeichen verwendet wird für die Flucht.
Das obige ist der detaillierte Inhalt vonWarum erfordern die WHERE- und LIKE-Klauseln von MySQL unterschiedliche Backslash-Escapezeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!