2011-11-22 123 views

回答

4

因爲有一些非常罕見的編碼支持mysql,其中mysql_escape_string將允許SQL注入,但mysql_real_escape_string()不會。

然而,只要你的編碼或者是單字節或UTF-8,也不會有害處從函數mysql_escape_string()曾經和一個可以不用擔心使用它。

另一方面,要注意的是,實際上mysql_real_escape_string()如果單獨使用將不會有什麼好處。
如期望僅當MySQL驅動編碼設定,使用mysql_set_charset()函數它將工作(或通過一些MySQL服務器TWEAK)。
否則會起到正是因爲誹謗函數mysql_escape_string以同樣的方式()。

另外值得注意的是,實際上這些功能是不鼓勵,主要是因爲不正確的使用。
而本地人則會廣泛推送PDO準備好的語句來代替使用。

正如你可能已經猜到了,如果單獨使用,開箱即用的PDO準備語句將沒有任何好處。必須採取一些準備。
一個必須要麼

  • 關斷模擬模式,這是在默認情況下
  • 或設置我們的老朋友 - MySQL驅動編碼 - 而這種訴訟是在DSN只允許和僅自5.3 0.3。

或者在代理某些非常罕見的編碼方面,PDO和mysql_escape_string之間沒有區別。

6

拿在文檔更好看,它說以下內容:

此功能是相同的mysql_real_escape_string()除了 mysql_real_escape_string()需要一個連接處理器和脫 字符串根據當前字符集。函數mysql_escape_string() 並不需要一個連接的參數,不尊重當前 字符集設置。

因此mysql_escape_string已被棄用。相反,使用mysql_real_escape_string()

相關問題