mysql_real_escape_string
并且addslashes
都用于在数据库查询之前转义数据,那有什么区别?(这个问题不是关于参数化查询/ PDO/mysqli)
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.
mysql_real_escape_string()
通过可选的link_identifier参数,相对于数据库的字符集,可以正确地转义文本输入.
字符集意识是一个重要的区别.addslashes()
将在每个要转义的字符的八位二进制表示之前添加斜杠.
如果你使用某种形式的多字节字符集,虽然可能只是通过字符集设计不佳,但是16或32位字符表示的一半或两半与字符的8位相同是addslashes()
可能的.添加斜杠.
在这种情况下,您可能会在不应该转义的字符之前添加斜杠,或者更糟糕的是,您可能会在十六(或三十二)位字符的中间获得一个斜线,这会破坏数据.
如果您需要在数据库查询中转义内容,则应始终使用mysql_real_escape_string()
.addslashes()
如果您确定数据库或表仅使用7位或8位ASCII编码,则可以.