PHP mysqli:转义字符串保存奇怪

时间:2012-01-04 19:51:10

标签: php mysqli

我正在使用CodeMirror编写代码编辑器。我将在mySQL数据库中保存Javascripts。因为Javascript使用了'符号,所以我不得不在textarea上使用mysqli->real_escape_string() 输入

当我从脚本表中检索源时,它仍然具有转义字符。

所以,如果我要插入这个:

this.update('something');

你会有

this.update(\'something\');

有没有办法扭转这个过程?

2 个答案:

答案 0 :(得分:1)

你使用mysqli准备好的陈述吗? 如果是这样,则不应使用mysqli->real_escape_string()然后使用 如果没有 - 那么你有magic_quotes_gpc,你必须将其关闭

答案 1 :(得分:0)

您可以随时尝试使用stripslashes()

虽然你的real_escape_string不能正常工作但很奇怪。它不应该留下斜线。可能是您的主机已启用magic_quotes_runtime。您可以使用set_magic_quotes_runtime(0)将其关闭。

也许你使用mysql_real_escape_stringaddslashes双重逃避?

最佳做法是更改代码以使用绑定变量,而不是使用字符串转义。

示例:

$query = $mysqli->prepare( "UPDATE tablename SET favorite_color = ?, age = ?, description = ? WHERE user = ?" );

// we would have a bind looking like this:
$query->bind_param( 'sibs', 'red', 27, $some_blob, $variable );
$query->execute();

可以找到关于此(和SQL注入)的合适解释here