mysql_escape_string VS mysql_real_escape_string

时间:2010-09-08 07:42:40

标签: php escaping mysql-real-escape-string mysql-escape-string

所以这是我们都应该知道的事情,并且在我第一次看到它时就在我的脑海中浮现......

我知道mysql_escape_string已从5.3弃用,但mysql_real_escape_string的实际差异是什么。

我认为mysql_real_escape_stringmysql_escape_string完全相同,除了mysql_real_escape_string之外,它为mysql资源提供了第二个参数。

所以我认为,如果处理字符串必须有一些区别,因为不需要2个函数。

那么我认为差异完全取决于语言环境和字符编码。 ?

任何人都可以为我解决这个问题吗?

4 个答案:

答案 0 :(得分:87)

区别在于mysql_escape_string只是将字符串视为原始字节,并在认为合适的地方添加转义。

另一方面,

mysql_real_escape_string使用有关用于MySQL连接的字符集的信息。这意味着在正确处理多字节字符时转义字符串;即,它不会在字符中间插入转义字符。这就是您需要mysql_real_escape_string的连接的原因;为了知道如何处理字符串,这是必要的。

然而,使用MySQLi库中的参数化查询不是转义,而是更好的主意;逃逸例行程序之前存在错误,有些可能会再次出现。参数化查询要困难得多,因此不太可能被MySQL错误攻击。

答案 1 :(得分:3)

mysql_escape_string不会从5.3弃用,但是对于4.3.0及更高版本。 因此,任何使用上述/或4.3.0版本的PHP都应该使用mysql_real_escape_string

如果使用php < 4.3.0,请从php.ini制作magic_quotes_gpc active,但建议更新,但如果您的代码有问题,请确保使用magic_quotes_gpcaddslash功能而不是mysql_escape_string

答案 2 :(得分:2)

嗯......有点,是的。它考虑了MySQL连接的字符集。

http://php.net/mysql_escape_string

  

此函数与mysql_real_escape_string()相同,只是mysql_real_escape_string()接受连接处理程序并根据当前字符集转义字符串。 mysql_escape_string()不接受连接参数,也不尊重当前的字符集设置。

答案 3 :(得分:1)

现在这两个函数都已弃用

  

PHP 4&gt; = 4.3.0和PHP 5。   他们建议使用PDO_MySQL扩展名