在插入MySQL时转义PHP中的单引号
这个问题在这里已经有了答案:
你应该用mysql_real_escape_string()
来转义每个字符串(在这两个片段中mysql_real_escape_string()
。
http://us3.php.net/mysql-real-escape-string
你的两个查询行为不同的原因可能是因为你开启了magic_quotes_gpc
(你应该知道这是一个坏主意)。 这意味着从$ _GET,$ _POST和$ _COOKIES收集到的字符串会被转义(即"O'Brien" -> "O'Brien"
)。
一旦你存储了数据,然后再次检索它,你从数据库中取回的字符串将不会自动为你逃脱。 你会回来"O'Brien"
。 所以,你需要通过mysql_real_escape_string()
来传递它。
对于任何在2015年找到这个解决方案并前进的人......
mysql_real_escape_string()
函数从PHP 5.5.0开始已弃用。
请参阅:php.net
警告
此扩展从PHP 5.5.0开始已弃用,并将在未来删除。 相反,应该使用MySQLi或PDO_MySQL扩展。 另请参阅MySQL:选择API指南和相关FAQ以获取更多信息。 这个功能的替代方案包括:
mysqli_real_escape_string()
PDO::quote()
你应该这样做来帮助你调试
$sql = "insert into blah blah....";
echo $sql;
您可能会发现单引号在正在运行的查询中使用反斜杠进行转义。 这可能是由php通过magic_quotes_gpc设置自动完成的,也可能是你自己在代码的其他部分完成的(addslashes和stripslashes可能是需要查找的函数)。
见http://php.net/manual/en/security.magicquotes.php
链接地址: http://www.djcxy.com/p/16719.html