mysql_real_escape_string
und addslashes
werden beide verwendet, um Daten vor der Datenbankabfrage zu entkommen, was ist der Unterschied? (Diese Frage nicht etwa ist Abfragen/PDO/mysqli parametrisiert)Was ist der Unterschied zwischen mysql_real_escape_string und addslashes?
Antwort
string mysql_real_escape_string (string $unescaped_string [, resource $link_identifier ])
mysql_real_escape_string()
ruft MySQLs Bibliotheksfunktion mysql_real_escape_string, die Schrägstriche auf die folgenden Zeichen prepends:. \ X00, \ n \ r, \,‘,", und \ X1a
string addslashes (string $str)
Gibt eine Zeichenfolge mit umgekehrten Schrägstrichen vor Zeichen zurück, die in Datenbankabfragen usw. zitiert werden müssen. Diese Zeichen sind ein einfaches Anführungszeichen ('), doppelte Anführungszeichen ("), umgekehrter Schrägstrich (\) und NUL (das NULL-Byte).
Sie wirken sich auf verschiedene Zeichen aus. mysql_real_escape_string
ist spezifisch für MySQL. Addslashes ist nur eine allgemeine Funktion, die für andere Dinge sowie für MySQL gelten kann.
Sie kopierten nur Definitionen und nicht wirklich die Frage, was ist eigentlich Unterschied, das heißt, was sind Verwendungen und was sind Fallstricke, in welcher Weise ist eine Funktion besser als der andere. Bessere Antwort ist hier: http://Stackoverflow.com/a/3473077/1335996 –
Lesen Sie noch einmal und Sie werden den letzten Absatz, wo ich festgestellt, dass verschiedene Zeichen betroffen sind, die die zitierte Dokumentation zusammenfasst. Sie werden sehen, dass die Frage beantwortet wurde. In der Frage wurde nicht gefragt, "warum einer besser ist als der andere" oder "Vorteile und Fallstricke". Die verknüpfte Antwort geht tiefer und es lohnt sich zu lesen, wenn das obige noch nicht klar für Sie ist, aber ich sehe nicht, dass es notwendig ist, Löcher in meiner Antwort zu suchen. –
Es scheint, dass mysql_real_escape_string
ist binary safe - In der Dokumentation:
Wenn binäre Daten eingeführt werden soll, wird diese Funktion verwendet werden muss.
Ich denke, es ist wahrscheinlich sicherer, immer mysql_real_escape_string
als addslashes zu verwenden.
Ich denke, es ist wahrscheinlich sicherer * parametrisierte Abfragen zu verwenden *, obwohl der Fragesteller das ausgeschlossen hat. –
@Hank Gay: einverstanden, aber der beiden, mysql_real_escape_string ist orerable, –
mysql_real_escape_string
sollte verwendet werden, wenn Sie binäre Daten empfangen, addslashes
ist für Texteingabe.
können Sie die Unterschiede sehen hier: mysql-real-escape-string und addslashes
mysql_real_escape_string()
haben den zusätzlichen Vorteil der Texteingabe korrekt in Bezug auf den Zeichensatz einer Datenbank über die optionalen link_identifier Parameter zu entkommen.
Zeichensatzbewusstsein ist eine kritische Unterscheidung. addslashes()
fügt vor jeder Acht-Bit-Binärdarstellung eines jeden zu maskierenden Zeichens einen Schrägstrich hinzu. Wenn Sie irgendeine Form von Multibyte-Zeichensatz verwenden, ist es möglich, obwohl wahrscheinlich nur durch ein schlechtes Design des Zeichensatzes, dass eine oder beide Hälften einer 16- oder 32-Bit-Zeichendarstellung mit den acht Bits identisch sind eines Zeichens addslashes()
würde einen Schrägstrich hinzufügen.
In solchen Fällen können Sie einen Schrägstrich vor einem Zeichen erhalten, das nicht maskiert werden sollte, oder schlimmer noch, Sie könnten einen Schrägstrich in der Mitte eines sechzehn (oder zweiunddreißig) Bit-Zeichens erhalten, das die Daten verfälschen würde .
Wenn Sie Inhalt in Datenbankabfragen fliehen müssen, sollten Sie immer mysql_real_escape_string()
verwenden, wo es möglich ist. addslashes()
ist in Ordnung, wenn Sie sicher sind, dass die Datenbank oder Tabelle nur ASCII-Codierung mit 7 oder 8 Bit verwendet.
Fall 1:
$str = "input's data";
print mysql_real_escape_string($str); input\'s data
print addslashes($str); input\'s data;
Fall 2:
$str = "input\'s data";
print mysql_real_escape_string($str); input\'s data
print addslashes($str); input\\'s data;
- 1. mysql_real_escape_string VS addslashes
- 2. Was ist der Unterschied zwischen `==` und `ist`?
- 3. Was ist der Unterschied zwischen:.! und: r !?
- 4. Was ist der Unterschied zwischen Difftime und '-'?
- 5. Was ist der Unterschied zwischen $ und $$?
- 6. Was ist der Unterschied zwischen Verilog! und ~?
- 7. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 8. Was ist der Unterschied zwischen/* ... */und/** ... */
- 9. Was ist der Unterschied zwischen `&` und `ref`?
- 10. Was ist der Unterschied zwischen $ (...) und `...`
- 11. Was ist der Unterschied zwischen .Equals und ==
- 12. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 13. Was ist der Unterschied zwischen + = und = +?
- 14. Was ist der Unterschied zwischen? und ? = Nil
- 15. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 16. Was ist der Unterschied zwischen:
- 17. Was ist der Unterschied zwischen der JSP und der JSTL?
- 18. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 19. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 20. Was ist der Unterschied zwischen x86 und x64 ist
- 21. Was ist der Unterschied zwischen „ist None“ und „== None“
- 22. Was ist der Unterschied zwischen DISPATCH_QUEUE_CONCURRENT und DISPATCH_QUEUE_SERIAL ist
- 23. Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
- 24. Was ist der Unterschied zwischen RewriteRule ist und umleiten 301
- 25. Was ist der Unterschied zwischen ist - (void) und + (void) Methoden
- 26. Was ist der Unterschied zwischen ist HttpResponseMessage und HttpResponseException
- 27. Was ist der Unterschied zwischen nohup und kaufmännisches Und
- 28. Was ist der Unterschied zwischen: und :: und ::: in Javascript Grammatik
- 29. Was ist der Unterschied zwischen Microsoft.AspNet.WebApi.OData und Microsoft.Data.OData und Microsoft.AspNet.OData?
- 30. Was ist der Unterschied zwischen Chisel und Lava und CLaSH?
Ähnlich wie diese Frage: http://stackoverflow.com/questions/534742/what-does-mysql- real-escape-string-do-dass-addslashes-doesnt – Zack