Heim > Backend-Entwicklung > PHP-Tutorial > Warum verhalten sich MySQL-Escape-Wildcards unerwartet?

Warum verhalten sich MySQL-Escape-Wildcards unerwartet?

DDD
Freigeben: 2024-11-07 08:25:03
Original
798 Leute haben es durchsucht

Why is MySQL Escaping Wildcards Behaving Unexpectedly?

Grundlegendes zum MySQL-Escape für Platzhalter

Problem:

Beim Escapen von Benutzereingaben mit mysql_real_escape_string wird die Ausgabe in MySQL angezeigt unerwartetes Verhalten bei bestimmten Charakteren. Konkret steht vor dem Unterstrich ein Backslash, im Gegensatz zu einfachen und doppelten Anführungszeichen nicht.

Erklärung:

Entgegen der Annahme sind es und % Im allgemeinen Gebrauch sind sie keine MySQL-Platzhalter und sollten beim Einfügen in String-Literale nicht maskiert werden. mysql_real_escape_string ist für diesen Zweck ausreichend und das Hinzufügen von Addcslashes für und % sollte vermieden werden.

Wildcards werden nur im Zusammenhang mit LIKE-Matching relevant. Wenn Zeichenfolgen als literale LIKE-Ausdrücke ausgedrückt werden, ist eine zusätzliche Escape-Ebene erforderlich, wobei _ und % maskiert werden müssen. Dies geschieht getrennt vom allgemeinen String-Escapezeichen unter Verwendung desselben Backslash-Zeichens.

Lösung:

Für den LIKE-Abgleich folgen Sie diesen Schritten:

  1. Verwenden Sie LIKE-Escape, wobei _ und % maskiert werden müssen und das Escape-Zeichen ebenfalls maskiert werden muss maskiert.
  2. Führen Sie allgemeines String-Escape mit mysql_real_escape_string in MySQL oder entsprechenden Funktionen für andere Datenbanken durch.

Beispiel:

Um ein Literal abzugleichen Prozentzeichen, Double-Backslash-Escape in LIKE-Escape-Funktion (z. B. LIKE 'something\%' in MySQL) oder verwenden Sie ein anderes Escape-Zeichen mit dem LIKE ... ESCAPE ...-Konstrukt für Portabilität.

Portable LIKE-Escape-Funktion:

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

Beispiel mit Parametern:

$escapedname = mysql_real_escape_string(like($name, '='));
$query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum verhalten sich MySQL-Escape-Wildcards unerwartet?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage