所以这是我们都应该知道的事情,并且在我第一次看到它时就在我的脑海中浮现......
我知道mysql_escape_string
已从5.3弃用,但mysql_real_escape_string
的实际差异是什么。
我认为mysql_real_escape_string
与mysql_escape_string
完全相同,除了mysql_real_escape_string
之外,它为mysql资源提供了第二个参数。
所以我认为,如果处理字符串必须有一些区别,因为不需要2个函数。
那么我认为差异完全取决于语言环境和字符编码。 ?
任何人都可以为我解决这个问题吗?
答案 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_gpc
和addslash
功能而不是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
扩展名