2010-09-08 119 views
48

所以這是我知道mysql_escape_string從5.3過時但什麼mysql_real_escape_string實際相差我們大家都應該知道,並在我的腦海裏玩,當我第一次看到它..函數mysql_escape_string VS mysql_real_escape_string

我認爲mysql_real_escape_stringmysql_escape_string完全相同,除了mysql_real_escape_string對mysql資源採取第二個參數。

因此,我認爲好好處理,必須有一些區別,如何處理字符串,因爲不需要2個函數。

那麼我認爲這種差異純粹是由於語言環境和字符編碼。 ?

任何人都可以爲我清除這個?

回答

85

區別在於mysql_escape_string只是將字符串視爲原始字節,並在其認爲合適的地方添加了轉義。另一方面,使用關於用於MySQL連接的字符集的信息。這意味着在正確處理多字節字符時字符串會被轉義;即它不會在字符的中間插入轉義字符。這就是爲什麼你需要連接mysql_real_escape_string;有必要了解如何處理字符串。

但是,使用MySQLi庫中的參數化查詢是一個更好的主意,而不是轉義,之前在逃跑例程中存在缺陷,並且有可能再次出現。參數化查詢要困難得多,所以你不太可能被MySQL漏洞攻陷。

+6

+1提準備語句 – Jacco 2010-09-08 07:56:07

+0

我使用PDO,這只是一些我需要知道的教育目的。 – RobertPitt 2010-09-08 08:28:59

+0

還有一個mysqli_escape_string()。也做與mysql_escape_string相同的事情?如果mysql_escape_string被棄用,爲什麼有這個函數可用,並在mysqli呢? – Lykos 2013-03-22 07:54:06

2

那麼...有點,是的。它將MySQL連接的字符集考慮在內。

http://php.net/mysql_escape_string

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

3

mysql_escape_string不會從5.3中棄用,但對於4.3.0和更高版本。 因此,任何使用PHP版本以上/或4.3.0的應該使用mysql_real_escape_string

如果使用php < 4.3.0,不是讓你magic_quotes_gpc active在php.ini中的,但建議進行更新,但如果你的代碼會比問題,請確保您使用,magic_quotes_gpcaddslash函數,而不是mysql_escape_string

1

現在這兩種功能都棄用

PHP 4> = 4.3.0和PHP 5。 他們建議使用PDO_MySQL擴展