Heim > Datenbank > MySQL-Tutorial > Wie entgeht man MySQL-Platzhaltern in LIKE-Anweisungen ordnungsgemäß?

Wie entgeht man MySQL-Platzhaltern in LIKE-Anweisungen ordnungsgemäß?

Linda Hamilton
Freigeben: 2024-12-10 13:29:13
Original
1089 Leute haben es durchsucht

How to Properly Escape MySQL Wildcards in LIKE Statements?

MySQL-Platzhalter umgehen

In einer Umgebung, in der vorbereitete Anweisungen keine Option sind, ist es wichtig, Benutzereingaben vor der Übermittlung an MySQL gründlich zu maskieren, um eine SQL-Injection zu verhindern. Für diesen Zweck wird häufig die PHP-Funktion „mysql_real_escape_string“ verwendet, die jedoch nicht in der Lage ist, die MySQL-Platzhalterzeichen „%“ und „_“ zu maskieren.

Um dies zu berücksichtigen, können zusätzlich addcslashes verwendet werden. Wie ein Benutzer jedoch beobachtet hat, kommt es zu einer Diskrepanz in den angezeigten Ergebnissen, wenn Eingaben mit Platzhaltern an die Datenbank gesendet und abgerufen werden.

The Escaping Enigma

Der Benutzer ist auf ein eigenartiges Verhalten gestoßen, bei dem dem Zeichen „_“ ein umgekehrter Schrägstrich („_“) vorangestellt wurde, den Zeichen „““ und „‘“ hingegen kein umgekehrter Schrägstrich (‚_‘), obwohl dies bei allen der Fall war drei wurden mit '' maskiert. Dies wirft die Frage auf: Warum werden diese Zeichen unterschiedlich behandelt?

MySQL-Kontext verstehen

Der Schlüssel zur Lösung dieses Rätsels liegt im Verständnis der Kontext des LIKE-Matchings in MySQL. „_“ und „%“ gelten im allgemeinen MySQL-Verbrauch nicht als Platzhalter und sollten beim Erstellen eines String-Literals nicht maskiert werden. mysql_real_escape_string erfüllt die Escape-Anforderungen für diesen Zweck.

Bei der Vorbereitung von Zeichenfolgen für die Verwendung in einer LIKE-Anweisung gelten jedoch andere Escape-Regeln. Um sicherzustellen, dass Literale korrekt interpretiert werden, ist zusätzliches LIKE-Escape erforderlich.

Double Escape Dilemma

In Im Kontext der LIKE-Übereinstimmung werden „_“ und „%“ zu Sonderzeichen. MySQL verwendet den Backslash ('') als Escape-Zeichen sowohl für die LIKE-Escape-Schritte als auch für die String-Literal-Escape-Schritte. Dies kann zu Verwirrung führen, wie das Beispiel des Benutzers zeigt, bei dem für die Übereinstimmung eines wörtlichen Prozentzeichens mit LIKE ein doppelter Backslash-Escapezeichen erforderlich ist.

Richtiges LIKE-Escapezeichen

Um Portabilität zu vermeiden Bei Problemen schreibt ANSI SQL die Verwendung eines bestimmten Escape-Zeichens für LIKE-Anweisungen vor. Eine Möglichkeit, dies in PHP zu erreichen, ist die Verwendung der folgenden Funktion:

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

Verwendung mit vorbereiteten Anweisungen

Für zusätzliche Sicherheit und Portabilität empfiehlt sich die Verwendung von Prepared Erklärungen, sofern verfügbar. Dadurch entfällt die Notwendigkeit manueller Escape-Operationen und gleichzeitig wird eine ordnungsgemäße Datenverarbeitung gewährleistet.

Das obige ist der detaillierte Inhalt vonWie entgeht man MySQL-Platzhaltern in LIKE-Anweisungen ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage