mysql_real_escape_string
和addslashes
都用于在数据库查询之前转义数据,那有什么区别? (这个问题不是关于参数化查询/ PDO / mysqli)
答案 0 :(得分:15)
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
mysql_real_escape_string()
调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',“和\ x1a。
string addslashes ( string $str )
在需要在数据库查询等中引用的字符之前返回带反斜杠的字符串。这些字符是单引号('),双引号(“),反斜杠(\)和NUL(NULL字节)。
它们会影响不同的角色。 mysql_real_escape_string
特定于MySQL。 Addslashes只是一个通用函数,可以应用于其他东西以及MySQL。
答案 1 :(得分:8)
mysql_real_escape_string()
具有通过可选的 link_identifier 参数正确转义文本输入相对于数据库字符集的好处。
字符集意识是一个重要的区别。 addslashes()
将在每个要转义的字符的八位二进制表示之前添加斜杠。
如果你正在使用某种形式的多字节字符集,虽然可能只是通过字符集的设计不佳,但是16或32位字符表示的一半或两半与8位字符集相同。字符addslashes()
会添加斜杠。
在这种情况下,您可能会在不应该转义的字符之前添加斜杠,或者更糟糕的是,您可能会在十六(或三十二)位字符的中间添加斜杠,这会破坏数据。
如果您需要在数据库查询中转义内容,则应尽可能使用mysql_real_escape_string()
。如果您确定数据库或表仅使用7位或8位ASCII编码,addslashes()
就可以了。
答案 2 :(得分:1)
案例1:
$str = "input's data";
print mysql_real_escape_string($str); input\'s data
print addslashes($str); input\'s data;
案例2:
$str = "input\'s data";
print mysql_real_escape_string($str); input\'s data
print addslashes($str); input\\'s data;
答案 3 :(得分:0)
似乎mysql_real_escape_string
是二进制安全的 - 文档声明:
如果要插入二进制数据,则必须使用此功能。
我认为总是使用mysql_real_escape_string
比使用addslashes更安全。
答案 4 :(得分:0)
mysql_real_escape_string
,addslashes
用于文本输入。
您可以在此处查看差异:mysql-real-escape-string和addslashes