为什么这个带有magic_quotes_gpc的PDO数据库插入仍会导致db中的反斜杠?

时间:2012-06-18 18:05:21

标签: mysql pdo escaping magic-quotes-gpc

在我正在使用的服务器上(运行php_fastcgi5),根目录中有一个包含该指令的.htaccess文件,以关闭magic_quotes_gpc:

php_flag magic_quotes_gpc off

phpinfo()输出报告magic_quotes_gpc的本地值确实已关闭。 (然而,主值是“开启”。)

我不确定这是否准确报告,首先是因为我阅读了this posting,其次是因为使用PDO预处理语句的以下代码仍然以插入数据库记录的反斜杠结束:

<?php
$db = new PDO('mysql:host=example.com;dbname=my_database_name;charset=utf8', 'database_user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$output = '<p>Post some text which includes some apostrophes:</p><form name="form" action="test.php" method="post"><input type="text" size="60" name="string" value="The server\'s not behaving as it\'s supposed to." /><br /><br /><input type="submit" value="Post" /></form><br />----------<br />';

if (isset($_POST['string'])) {
  $PostedString = $_POST['string'];
  $InsertQuery = $db->prepare("INSERT INTO `test` (string) VALUES (?)");
  $SuccessfulInsertion = $InsertQuery->execute(array($PostedString));
  if ($SuccessfulInsertion) {
    $ReadStatement = $db->prepare('SELECT * FROM `test` ORDER BY `id`');
    $ReadStatement->execute();
    $ReadStatement->setFetchMode(PDO::FETCH_ASSOC);
    while($row = $ReadStatement->fetch()) {
      $ThisString = $row['string'];
      $output .= '<p>'.$ThisString.'</p>'.$CR;
    }
  }
}
echo $output;
?>

有谁知道为什么使用此代码插入数据库的文本仍会导致在撇号之前添加斜杠的db记录?

是因为PHP作为php_fastcgi5运行(即,关闭magic_quotes_gpc的.htaccess指令是不是因为这个而工作)?如果是这样,有解决方法吗? (我无法访问php.ini文件。)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

Magic_quotes_gpc - local:Off - master:On

但$ _POST有斜线。

还运行fastcgi。我想知道fastcgi是否存在问题?

我们不得不用-d magic_quotes_gpc = off强制关闭它。