mysql - 为什么在关闭 magic_quotes_gpc 的情况下插入 PDO 数据库仍会导致数据库中出现反斜杠?

标签 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;
?>

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

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

最佳答案

我遇到了同样的问题。

Magic_quotes_gpc - local: Off - master: On

但是 $_POST 有斜线。

同时运行 fastcgi。请问是不是fastcgi的问题?

我们必须使用 -d magic_quotes_gpc=off 强制关闭它。

关于mysql - 为什么在关闭 magic_quotes_gpc 的情况下插入 PDO 数据库仍会导致数据库中出现反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088494/

相关文章:

MySQL - 将按日期值分组的计数值设置为 0

java - SQL转义遵循什么规则?

MySql 正则表达式转义撇号(’)

javascript - 如果记录已经存在或者如果它在 PDO MySQL 插入查询中不存在,我如何生成 javascript 警报?

php - XML 到 MySQL - 数据更新(不重复)

c# - 不能在 XAML 绑定(bind)的 StringFormat 中使用撇号?

php - 选择每种类型的多个项目

MySQL获取多行成列

c# - 使用表中的外键在连接到MYSQL的C#DatagridView中插入行

php - 只读数据库上的 PDO::exec() 不返回