在许多人告诉我这样做之后,我正在学习PDO。然而,在更新我的一个脚本,PDO导致我的问题,我不知道如何修复。
我的问题是用户将输入标题到网站。说是"史密斯的存货"
由于整个PDO开关,它在数据库中保存为"史密斯库存"。这是我网站上不同地方的输出。例如标题、html标题和设置文本框。如果你用'再次点击保存,那么你得到\',以此类推。
我知道为什么要这样做,但是怎样才能解决呢?
插入代码:
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>';
看起来您在双重转义数据。
最可能的原因是:
- 你的PHP安装已经启用了魔法引号-最好关闭它们
- 您正在使用mysql_real_escape_string 和带占位符的准备语句-仅使用后者
我以前遇到过这个问题,这是由于PHP的魔术引号。为了防止sql注入,PHP会自动插入斜杠来转义"危险"字符。
你需要在你的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
您可以在PHP端使用stripslashes
<?php
$str = "Is your name O'reilly?";
// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>