2012-07-25 70 views
4

在MySQL中,QUOTE()mysql_real_escape_string()之間有什麼區別?從MySQL文檔,我瞭解以下內容:MySQL QUOTE()vs mysql_real_escape_string()?

QUOTE()

  • 寫進SQL查詢
  • 轉義反斜槓,單引號,NUL,CTRL + Z
  • 返回一個單帶引號的字符串
  • 行爲依賴於MySQL服務器的字符集

mysql_real_escape_string()

  • 寫在C/C++查詢之前被執行,從而允許轉義字符串被讀/提交前改性
  • 非常不方便相比QUOTE()
  • 逃逸反斜槓時使用,單引號,NUL,CTRL + Z和雙引號,\ n和\ r
  • 顯然增加了更多的報價,使人物在日誌文件中輕鬆可讀
  • 行爲依賴於MySQL服務器的字符集

忽略日誌,它是有用的逃生\n\r字符?有了這兩個函數,客戶/服務器功能效率有什麼不同? mysql_real_escape_string()如果希望開發人員在輸入查詢之前處理轉義字符串,這聽起來很有用。但是,QUOTE()不提供最安全可靠的字符串轉義方法嗎?

我不知道是否應該使用QUOTE()來處理所有語言的所有查詢,並忘記使用語言特定函數轉義字符串。


回答

3

看來QUOTE()是用來構造其他SQL語句的SQL語句。如果您不在SQL之外,則應該使用mysql_real_escape_string()

[...]在C程序中,您可以使用mysql_real_escape_string() C API函數來轉義字符。 [...]在構造其他SQL語句的SQL語句中,可以使用QUOTE()函數。

正如在String Literals (MySQL Manual)的底部解釋的那樣。

0

QUOTE()已經在查詢,所以它只是作爲容易擺脫的,如果你已經把什麼都沒有。 mysql_real_escape_string對於使查詢中的任意字符串安全起作用至關重要。

通過使用某種別名,可以很容易地解決函數名稱不便的問題。我不是C/C++用戶,但是它沒有宏,你可以使用宏來編寫任何你想要的東西,它會被長函數名取代嗎?

+0

所以'QUOTE()'不是注射安全的?什麼時候'QUOTE()'適合使用?我擔心功能,而不是方便。你也是正確的,因爲C++有宏。 – collinjsimpson 2012-07-25 03:38:20

+0

我不知道爲什麼'QUOTE()'會有用,恐怕... – 2012-07-25 03:40:31