这个问题已经在这里有了答案:




已关闭8年。






如果他们做的不完全一样,有什么区别? MySQL查询中值的定界符是'是吗?或者,也许是",但也可以通过添加斜线转义。

在其他数据库引擎中,我理解了(并且肯定在PDO之类的db包装器中),但是为什么有那么多人如此热衷于使用mysql(i)_escape_string而不是adslashes?

最佳答案

首先:不使用mysql_escape_string,已弃用(出于某种原因)!

如果必须支持通过mysql扩展名(即has been deprecated)连接到数据库的旧版应用程序,请改为使用 mysql_real_escape_string 。否则从switch immediatelymysqli,其中准备好的语句和绑定(bind)参数为转义用户输入提供了更健壮的机制。

也就是说,可以通过阅读 mysql_real_escape_string addslashes 的描述找到答案:

差异#1
addslashes对MySql连接编码一无所知。如果向其传递一个字符串,该字符串包含表示MySql连接使用的编码以外的其他编码的字节,则它将愉快地转义所有具有字符'"\\x00的值的字节。如果您使用的不是8位编码和UTF-8编码,则此字符可能与所有字符'"\\x00不同。结果将是MySql接收的字符串将被破坏。

要触发此错误,请尝试使用 iconv 将变量转换为UTF-16,然后使用addslashes对其进行转义。查看您的数据库收到了什么。

这是addslashes不应用于转义的原因之一。

差异#2

addslashes相比,mysql_real_escape_string还会转义字符\r\n\x1a。与MySql交谈时,似乎也必须转义这些字符,否则可能会导致格式错误的查询

这是不应该使用addslashes进行转义的另一个原因。

关于php - PHP的addlashes和mysql(i)_escape_string有什么区别? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4486016/

10-11 17:19