为什么我们需要特定于数据库的函数,如mysql_real_escape_string()?它能做什么,addslashes()不是吗?
暂时忽略参数化查询的优越替代方案,是一个使用addslashes()的webapp,它仍然容易受到SQL注入的攻击,如果是,如何?
它添加了斜杠:
\x00, \n, \r, \, ', " and \x1a. characters.
addslashes只添加斜杠
' \ and NUL
伊利亚斯的文章也非常详细地介绍了它的功能
在处理多字节编码字符串时,Addslashes通常不够好.
gs苛刻的低调回答实际上是对的.
标准SQL使用加倍来逃避文字撇号.MySQL的非标准反斜杠用于转义是默认设置,但它可以被禁用,通常是,特别是在sql_mode ANSI中.
在这种情况下,只有doubled语法才能工作,并且您使用addslashes(或其他ad-hoc转义方法)的任何应用程序都将中断.mysql_real_escape_string将使用最适合连接的sql_mode的转义方法.
如果您仍在使用那些重复使用较低128个字符的令人讨厌的东亚编码,那么多字节编码问题也很重要,但实际上您想要使用UTF-8.另一方面,由于MySQL可以完全愉快地处理声明中的原始换行符,因此无需担心.