2011-07-25 132 views
0

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

回答

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注入!