保存'到数据库,我得到\'在文本框中

时间:2013-01-15 16:15:26

标签: php html mysql pdo

在许多人告诉我之后,我正在学习PDO。但是,在更新我的一个脚本时,PDO会导致我出现一个我不确定如何修复的问题。

我的问题是用户会将标题输入网站。说它的“史密斯的库存”。

自整个PDO切换后,它将作为“Smith \'s Inventory”保存在数据库中。哪个在我的网站上的各个地方输出。例如标题,html标题和设置文本框。如果再次使用\'单击“保存”,则会获得\\',依此类推。

我意识到为什么要这样做,但如何解决呢?

这是instert代码:

foreach ($_POST as $key => $value)
{
    $sql = $dbh->prepare("UPDATE settings set value=? where variable=?");
    $sql->bindParam(1, $value);
    $sql->bindParam(2, $key);
    $sql->execute();
}
echo '<h2><font  color=green>Saved</font></h2>';

3 个答案:

答案 0 :(得分:3)

看起来你是双重逃避数据。

最可能的原因是:

  • 您的PHP安装已启用魔术引号 - best to turn them off
  • 您正在使用类似mysql_real_escape_string 的预处理语句与占位符 - 仅使用后者

答案 1 :(得分:2)

之前我遇到过这个问题,这是由于PHP魔术引用。 PHP会自动插入斜杠来转义'冒险'字符,以防止sql注入。

你需要在php安装上禁用魔术引号或在输出之前使用stripstashes功能。

http://php.net/manual/en/security.magicquotes.disabling.php
http://php.net/manual/en/function.stripslashes.php

你可以在这里阅读魔术引语:

http://www.tizag.com/phpT/php-magic-quotes.php

答案 2 :(得分:1)

您可以在PHP端使用stripslashes

<?php
$str = "Is your name O\'reilly?";

// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>