Zuallererst:verwenden Sie mysql_escape_string
nicht , es ist (aus einem bestimmten Grund) veraltet!
Wenn Sie eine ältere Anwendung unterstützen müssen, die über mysql
eine Verbindung zur Datenbank herstellt Erweiterung (die veraltet wurde
). ), verwenden Sie mysql_real_escape_string
stattdessen. Andernfalls sofort wechseln
zu mysqli
, wobei vorbereitete Anweisungen und gebundene Parameter einen robusteren Mechanismus zum Escapezeichen von Benutzereingaben bieten.
Die Antwort findet sich jedoch in der Beschreibung von mysql_real_escape_string
und addslashes
:
Unterschied #1
addslashes
weiß nichts über MySql-Verbindungskodierungen. Wenn Sie ihm eine Zeichenfolge übergeben, die Bytes enthält, die eine andere Codierung als die von der MySql-Verbindung verwendete Codierung darstellen, werden alle Bytes mit den Werten der Zeichen fröhlich maskiert '
, "
, \
und \x00
. Dies ist möglicherweise nicht dasselbe wie alle Zeichen '
, "
, \
und \x00
wenn Sie eine andere Codierung als 8-Bit-Codierungen und UTF-8 verwenden. Das Ergebnis wird sein, dass die von MySql empfangene Zeichenfolge beschädigt wird.
Um diesen Fehler auszulösen, versuchen Sie es mit iconv
um Ihre Variable in UTF-16 zu konvertieren und ihr dann mit addslashes
zu entkommen . Sehen Sie, was Ihre Datenbank empfängt.
Dies ist einer der Gründe, warum addslashes
sollte nicht zum Entkommen verwendet werden.
Unterschied #2
Im Gegensatz zu addslashes
, mysql_real_escape_string
maskiert auch die Zeichen \r
, \n
, und \x1a
. Anscheinend müssen diese Zeichen bei der Kommunikation mit MySql ebenfalls maskiert werden, da sonst eine fehlerhafte Abfrage das Ergebnis sein kann
Dies ist der andere Grund für addslashes
sollte nicht zum Entkommen verwendet werden.