有人可以从PHP手册中了解这两个函数之间的差异
addslashes:在需要在数据库查询中引用的字符之前返回带反斜杠的字符串.这些字符是单引号('),双引号("),反斜杠()和NUL(NULL字节).
mysql_real_escape_string:mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符:\ x00,\n,\ r,\,',"和\ x1a.
从我收集到的主要区别是\ x00,\n\r\x1a,其中addlashes无法逃脱,你能告诉我这是什么意义吗?
谢谢
zne*_*eak 51
你引用的可能来自文档,但据我所知,它不一定是真的.
addslashes将斜杠添加到通常令人不安的字符中.mysql_real_escape_string逃避MySQL需要转义的任何内容.这可能比所addslashes照顾的更多或更少的字符.
此外,mysql_real_escape_string不一定要添加斜杠来逃避.虽然我认为如果你这样做是有效的,但是最新版本的MySQL通过将两个放在一起而不是在它之前放一个斜杠来逃避引用.
我相信你应该总是使用你的数据提供者的转义函数,而不是addslashes因为addslashes你使用它可能会做太多或不够的工作.另一方面,mysql_real_escape_string 知道如何准备字符串以将其嵌入查询中.即使规格改变了如何逃避的东西,突然间你不再使用反斜杠了,你的代码仍然有用,因为mysql_real_escape_string它会意识到它.
Bil*_*win 15
mysql_real_escape_string()还会考虑当前连接到数据库使用的字符集.
PHP函数mysql_real_escape_string()使用同名的MySQL C API函数:http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html
另外,由着名的PHP安全专家Chris Shiflett 阅读addslashes()和mysql_real_escape_string(),以证明即使使用addslashes()也可以获得SQL注入攻击.
其他人建议使用查询参数,然后您不必进行任何动态值的转义.我也推荐这个,但在PHP中你必须切换到PDO或ext/mysqli,因为普通的ext/mysql API不支持查询参数.
此外,可能存在一些不能将查询参数用于动态字符串值的极端情况,例如全文搜索中的搜索模式.
| 归档时间: |
|
| 查看次数: |
42074 次 |
| 最近记录: |