我正在使用mysql。在项目中有一个用户编辑字段。如果名称包含像's那样的字符,那么在保存记录时它会在撇号之前自动插入'\'字符,名称变为xyz \'s。下次agin在保存的同时插入另一个这样的字符,名称变为xyz \'s。 有什么解决方案吗? 谢谢。
答案 0 :(得分:4)
您很可能已启用magic_quotes指令(不应该)。它会在引号之前自动添加反斜杠,因此如果您使用的是mysql_real_escape_string,它将被添加两次。如果您没有使用mysql_real_escape_string,那么......正好shame on you!。
function escape($field)
{
if(magic_quotes_gpc())
{
$field = mysql_real_escape_string(stripslashes($field));
}
else
{
$field = mysql_real_escape_string($field);
}
}
然后就这样做(确保在调用函数之前有一个打开的连接,或者mysql_real_escape_string()返回FALSE)
$name = escape($_POST['name']);
或者简单地将它从你的PHP ini中删除:
ini_set('magic_quotes_gpc',0);
更好,使用prepared statements并停止担心转义和SQL注入!
答案 1 :(得分:0)
您已启用魔术报价。
上的手册部分