有人可以提供一些线索上这两个函数之间的差异,从PHP手册mysql_real_escape_string VS和addslashes
和addslashes: 返回与反斜线的字符串需要在数据库查询等,这些字符将被引用的字符之前单引号('),双引号(“),反斜线()和NUL(空字节)
mysql_real_escape_string: mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,其中前添加反斜杠以下字符:\ X00, \ n,\ r,\,',“和\ x1a。
从我收集的主要区别是\ x00,\ n \ r \ x1a哪些addslashes不逃脱,你能告诉我什么意思是?
感谢
ANSI SQL指定单引号可以用一行中的两个单引号表示,但mysql_real_escape_string()不会这样做 - 就我所见,它总是使用反斜线转义。如果你有一个通过加倍引号字符来逃脱MySQL版本的例子,我会对看到这个例子感兴趣。 – 2014-01-15 20:04:26
@BillKarwin,PHP的'mysql_real_escape_string'调用MySQL的['mysql_real_escape_string'](http://dev.mysql.com/doc/refman/4.1/en/mysql-real-escape-string.html),它可以做任何事情逃避弦乐。 PHP文档现在说它使用黑色斜线,但MySQL文档没有提到这一点。我记得在某些时候它会用''''而不是'\''来转义,也许情况不再是这样,或者它可能需要特定的连接设置('mysql_real_escape_string'需要一个连接参数,以便它可以在检查之后检查它们所有)。 – zneak 2014-01-15 20:18:51
啊哈,我测试并发现,如果你设置了'SQL_MODE = NO_BACKSLASH_ESCAPES',它的行为就像你描述的那样。我的困惑是因为'mysqldump'仍然不会做双引号字符,即使你有这个sql模式集。这意味着您可以创建一个无法在生成它的服务器上重新导入的转储文件! – 2014-01-15 20:27:54