-1

フォーラムでデータを送信すると、次のエラーが発生します。

SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。「説明、国、IP、ホスト名」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください)

私のコードはこれです:

        $STH = $DBH->prepare("INSERT INTO `Applications` (`Username`, `Email`, `Age`, `Reason`, `Explain`, `Country`, `IP`, `Hostname`) VALUES ( $username、$email、$age、$reason、$explain、$country、$ip、$hostname)");
        $STH->execute();

問題が見つからないようです。

4

1 に答える 1

2

PDO を正しく使用していないため、大規模な SQL インジェクションの問題が発生しています。SQL に入れられる値は、適切にエスケープする必要があります。

プレースホルダー メソッドでは、次のように指定します。

$STH = $DBH->prepare("INSERT INTO `Applications` (`Username`, `Email`, `Age`, `Reason`, `Explain`, `Country`, `IP`, `Hostname`) VALUES (:username, :email, :age, :reason, :explain, :country, :ip, :hostname)");
$STH->bindParam(':username', $username);
$STH->bindParam(':email', $email);
... (remaining columns) ..
$STH->bindParam(':hostname', $hostname);
$STH->execute();

これは、SQL が適切にエスケープされるようにする最善の方法です。

于 2013-04-05T20:50:51.677 に答える