1

在很多人告诉我这样做之后,我正在学习 PDO。然而,在更新我的一个脚本时,PDO 给我带来了一个我不知道如何解决的问题。

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

由于整个 PDO 切换,它在 db 中保存为“Smith\'s Inventory”。这是我网站上各个地方的输出。如标题、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>';
4

3 回答 3

3

看起来您正在双重转义数据。

最可能的原因是:

  • 您的 PHP 安装启用了魔术引号 -最好将其关闭
  • 您正在使用 mysql_real_escape_string 之类的东西带有占位符的预处理语句 - 仅使用后者
于 2013-01-15T16:18:45.440 回答
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
于 2013-01-15T16:23:18.607 回答
1

您可以stripslashes在 PHP 端使用。

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

// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>
于 2013-01-15T16:17:13.243 回答