有人可以提供一些線索上這兩個函數之間的差異,從PHP手冊mysql_real_escape_string VS和addslashes
和addslashes: 返回與反斜線的字符串需要在數據庫查詢等,這些字符將被引用的字符之前單引號('),雙引號(「),反斜線()和NUL(空字節)
mysql_real_escape_string: mysql_real_escape_string()調用MySQL的庫函數mysql_real_escape_string,其中前添加反斜槓以下字符:\ X00, \ n,\ r,\,',「和\ x1a。
從我收集的主要區別是\ x00,\ n \ r \ x1a哪些addslashes不逃脫,你能告訴我什麼意思是?
感謝
ANSI SQL指定單引號可以用一行中的兩個單引號表示,但mysql_real_escape_string()不會這樣做 - 就我所見,它總是使用反斜線轉義。如果你有一個通過加倍引號字符來逃脫MySQL版本的例子,我會對看到這個例子感興趣。 – 2014-01-15 20:04:26
@BillKarwin,PHP的'mysql_real_escape_string'調用MySQL的['mysql_real_escape_string'](http://dev.mysql.com/doc/refman/4.1/en/mysql-real-escape-string.html),它可以做任何事情逃避絃樂。 PHP文檔現在說它使用黑色斜線,但MySQL文檔沒有提到這一點。我記得在某些時候它會用''''而不是'\''來轉義,也許情況不再是這樣,或者它可能需要特定的連接設置('mysql_real_escape_string'需要一個連接參數,以便它可以在檢查之後檢查它們所有)。 – zneak 2014-01-15 20:18:51
啊哈,我測試並發現,如果你設置了'SQL_MODE = NO_BACKSLASH_ESCAPES',它的行爲就像你描述的那樣。我的困惑是因爲'mysqldump'仍然不會做雙引號字符,即使你有這個sql模式集。這意味着您可以創建一個無法在生成它的服務器上重新導入的轉儲文件! – 2014-01-15 20:27:54