撇号的问题

时间:2011-07-25 05:20:37

标签: php mysql

我正在使用mysql。在项目中有一个用户编辑字段。如果名称包含像's那样的字符,那么在保存记录时它会在撇号之前自动插入'\'字符,名称变为xyz \'s。下次agin在保存的同时插入另一个这样的字符,名称变为xyz \'s。 有什么解决方案吗? 谢谢。

2 个答案:

答案 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)

您已启用魔术报价。

请阅读disabling Magic Quotes

上的手册部分