为什么强烈建议不要使用mysql_escape_string?

时间:2011-11-22 20:22:14

标签: php mysql

2 个答案:

答案 0 :(得分:6)

更好地了解文档,它说明如下:

  

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

因此,mysql_escape_string已被弃用。相反,请使用mysql_real_escape_string()

答案 1 :(得分:4)

因为mysql支持一些非常罕见的编码,其中mysql_escape_string将允许SQL注入,但mysql_real_escape_string()不会。

但是,只要你的编码是单字节或UTF-8,mysql_escape_string()就没有任何危害,人们可以毫不畏惧地使用它。

另一方面,需要注意的是,事实上mysql_real_escape_string() 如果单独使用则不会有任何好处。
只有在使用mysql_set_charset()函数(或某些mysql服务器调整)设置了mysql驱动程序编码时,它才能正常工作。
否则它将与 mysql_escape_string()完全一样

另外需要注意的是,实际上两者这些功能都是不鼓励的,主要是因为使用不当。
而本地人则广泛推动使用PDO准备好的语句。

正如您现在可能猜到的那样,PDO准备好的声明如果单独使用,开箱即用将不会有任何好处。必须做一些准备工作 一个人必须要么

  • 关闭默认启用的仿真模式
  • 或设置我们的老朋友 - mysql驱动程序编码 - 虽然此类操作仅在DSN中允许,并且仅在5.3.3之后可用。

或者在处理一些非常罕见的编码方面,PDO和mysql_escape_string之间没有区别。