Heim >Backend-Entwicklung >PHP-Tutorial >Warum erfordert das Escapezeichen von MySQL-Platzhaltern doppelte Backslashes?

Warum erfordert das Escapezeichen von MySQL-Platzhaltern doppelte Backslashes?

Susan Sarandon
Susan SarandonOriginal
2024-11-12 11:22:02866Durchsuche

Why Does Escaping MySQL Wildcards Require Double Backslashes?

MySQL-Wildcards entkommen: Das Rätsel um das doppelte Escaping verstehen

Wenn Sie mit Benutzereingaben in PHP arbeiten und eine Verbindung zu einer MySQL-Datenbank herstellen, ist das Escape-Special etwas Besonderes Zeichen sind entscheidend, um böswillige Eingaben zu verhindern. Traditionell wurde für diesen Zweck die PHP-Funktion mysql_real_escape_string() verwendet, ihr fehlen jedoch Zeichen wie % und _, die in MySQL Platzhalter sind. Aus diesem Grund greifen viele Entwickler auf die Verwendung von addcslashes zurück, um auch diese Zeichen zu maskieren.

Das unerwartete Verhalten von addcslashes wirft jedoch Fragen auf. Warum maskiert es _ mit einem Backslash, aber nicht mit „ oder '? In diesem Artikel befassen wir uns mit den Nuancen des MySQL-Wildcard-Escapens und erkunden eine Lösung, um damit richtig umzugehen.

LIKE verstehen Escaping

Im Gegensatz zu anderen Platzhalterzeichen sind % und _ keine Platzhalter in Standard-MySQL-String-Literalen. Sie werden nur im Kontext des LIKE-Abgleichs zu Sonderzeichen, wo sie den Platzhalter-Abgleich anzeigen Für die Verwendung ist eine zusätzliche Escape-Ebene, bekannt als LIKE-Escape, erforderlich, auch bei parametrisierten Abfragen.

Beim LIKE-Escape müssen _ und % zusammen mit dem Escape-Zeichen selbst (normalerweise der Backslash) maskiert werden. Im Gegensatz zu Standard-SQL verwendet MySQL jedoch einen Backslash sowohl für literale Backslash-Escapes (in String-Literalen) als auch für LIKE-Escapes.

Doppeltes Escaping und das Problem mit Backslashes

Diese doppelte Verwendung von Backslashes führt zu einem verwirrenden Double-Escape-Szenario. Um beispielsweise ein wörtliches Prozentzeichen (%) abzugleichen, müssten Sie es mit einem Double-Backslash-Escapezeichen versehen, indem Sie LIKE „something\%“ verwenden. Dies ist jedoch laut ANSI SQL falsch und je nach Datenbank können Probleme auftreten.

Eine tragbare Lösung

Um dieses Problem zu beheben und die Portabilität sicherzustellen, Sie sollten das Standard-Escape-Zeichen in LIKE-Ausdrücken mit dem Konstrukt LIKE ... ESCAPE ... überschreiben. Hier ist eine Funktion, die diesen Ansatz veranschaulicht:

function like($s, $e) {
    return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s);
}

Mit dieser Funktion können Sie Zeichenfolgen für die LIKE-Verwendung maskieren und gleichzeitig ANSI SQL-Kompatibilität sicherstellen.

Fazit

Während das Escapen von Platzhaltern in MySQL einfach erscheinen mag, kann das Rätsel um das doppelte Escapen Verwirrung stiften. Indem Sie die Feinheiten des LIKE-Entkommens verstehen und eine tragbare Lösung einsetzen, können Sie böswillige Eingaben wirksam verhindern und die Integrität Ihrer Datenbank sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum erfordert das Escapezeichen von MySQL-Platzhaltern doppelte Backslashes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn