MySQL-Sonderzeichen für das Einfügen in die Datenbank maskieren
Beim Einfügen von Benutzereingaben in eine MySQL-Datenbank ist es wichtig, mögliche Schwachstellen durch ordnungsgemäßes Escapezeichen für Sonderzeichen zu verhindern Charaktere. Die PHP-Funktion mysql_real_escape_string erledigt diese Aufgabe effektiv, entgeht jedoch nicht den MySQL-Platzhaltern % und _.
Um dieses Problem zu beheben, verwenden viele Entwickler die Funktion addcslashes in Verbindung mit mysql_real_escape_string, um auch diese Platzhalter zu maskieren. Dieser Ansatz kann jedoch zu unerwarteten Ergebnissen führen.
Wildcard-Escaping in MySQL verstehen
Entgegen der landläufigen Meinung gelten _ und % in MySQL nicht als Platzhalter für allgemeine Zeichenfolgen Literale. Sie sollten nur maskiert werden, wenn sie in LIKE-Anweisungen zum Mustervergleich verwendet werden.
Die Hierarchie des Escapens
Das Escapen von Sonderzeichen im Kontext von LIKE-Anweisungen umfasst zwei Ebenen:
Die Verwirrung mit doppelten Backslashes
MySQL verwendet das Backslash-Zeichen als Escape-Zeichen sowohl für LIKE-Escapezeichen als auch für Strings buchstäbliches Entkommen. Dies kann zu Verwirrung führen, wie zum Beispiel beim Einfügen einer Zeichenfolge mit %. Doppelte Backslashes müssen verwendet werden, um es für LIKE-Zwecke zu maskieren, und dann muss die Zeichenfolge als Ganzes erneut mit Escapezeichen versehen werden, um String-Literale einzufügen.
ANSI SQL und Portable LIKE Escaping
ANSI SQL definiert, dass Backslashes innerhalb von String-Literalen literale Backslashes darstellen und einfache Anführungszeichen mit „“ maskiert werden. Allerdings weicht MySQL von diesem Standard ab. Um die Portabilität sicherzustellen, wird empfohlen, das Standardverhalten von MySQL zu überschreiben und ein benutzerdefiniertes Escape-Zeichen mithilfe des Konstrukts LIKE ... ESCAPE ... anzugeben. Zum Beispiel:
function like($s, $e) { return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s); } $escapedname = mysql_real_escape_string(like($name, '=')); $query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Sonderzeichen, einschließlich Platzhalter, beim Einfügen in die Datenbank sicher maskieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!