1

多くの人が私にそうするように言った後、私はPDOを学んでいます。しかし、スクリプトの 1 つを更新する際に、PDO が問題を引き起こし、修正方法がわかりません。

私の問題は、ユーザーがウェブサイトにタイトルを入力することです。その「スミスの在庫」と言ってください。

PDO全体が切り替わるので、「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

stripslashesPHP側で使えます。

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

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