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:
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); }
Beispiel mit Parametern:
$escapedname = mysql_real_escape_string(like($name, '=')); $query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
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!