在我使用的服务器上(运行 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/