1

私が使用している (php_fastcgi5 を実行している) サーバーでは、このディレクティブを含むルート ディレクトリに .htaccess ファイルがあり、magic_quotes_gpc をオフにします。

php_flag magic_quotes_gpc off

phpinfo() の出力は、magic_quotes_gpc のローカル値が実際にオフであることを報告します。(ただし、マスター値は「オン」です。)

これが正確に報告されているかどうかはわかりません。1つはこの投稿を読んだため、もう 1 つは、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 ファイルにはアクセスできません。)

4

1 に答える 1

0

私は同じ問題を抱えています。

Magic_quotes_gpc - ローカル: オフ - マスター: オン

ただし、$_POST にはスラッシュがあります。

また、fastcgiを実行しています。fastcgiの問題なのかな?

-d magic_quotes_gpc=off で強制的にオフにする必要がありました。

于 2012-07-19T00:13:16.823 に答える