2011-11-22 81 views

回答

4

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

然而,只要你的编码或者是单字节或UTF-8,也不会有害处从函数mysql_escape_string()曾经和一个可以不用担心使用它。

另一方面,要注意的是,实际上mysql_real_escape_string()如果单独使用将不会有什么好处。
如期望仅当MySQL驱动编码设定,使用mysql_set_charset()函数它将工作(或通过一些MySQL服务器TWEAK)。
否则会起到正是因为诽谤函数mysql_escape_string以同样的方式()。

另外值得注意的是,实际上这些功能是不鼓励,主要是因为不正确的使用。
而本地人则会广泛推送PDO准备好的语句来代替使用。

正如你可能已经猜到了,如果单独使用,开箱即用的PDO准备语句将没有任何好处。必须采取一些准备。
一个必须要么

  • 关断模拟模式,这是在默认情况下
  • 或设置我们的老朋友 - MySQL驱动编码 - 而这种诉讼是在DSN只允许和仅自5.3 0.3。

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

6

拿在文档更好看,它说以下内容:

此功能是相同的mysql_real_escape_string()除了 mysql_real_escape_string()需要一个连接处理器和脱 字符串根据当前字符集。函数mysql_escape_string() 并不需要一个连接的参数,不尊重当前 字符集设置。

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

相关问题