PDO の自動エスケープの問題について
準備メソッドと実行メソッドを使えば SQL インジェクションなどの攻撃も防ぐことができると本で読みました。すべての変数が自動的にエスケープされるためです
。
次に、フォームに df'dfdf" と入力しましたが、結果はデータを入力できませんでした。
SQL ステートメント: INSERT INTO cms_manage( admin_user, admin_pass, level, last_time ) VALUES( 'df'dfdf" ', 'da39a3ee5e6b4b0d3255bfef95601890afd80709', '6', NOW() )
エラー メッセージ: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。MySQL サーバーに対応するマニュアルを確認してください。 'dfdf"', 'da39a3ee5e6b4b0d3255bfef95601890afd80709', ' 行 9 付近で使用する正しい構文のバージョン
mysql_real_escape_string 関数を使用してデータ df'dfdf" をエスケープすると、準備と実行は自動的にエスケープされますか?手動で逃げる必要があります。
-----解決策--------------------------------
もちろんです!
しかし、SQL コマンドをポストしただけで、準備メソッドと実行メソッドは使用していません。
------解決策------------------
これはコードに問題があると思います。PDO の prepare()、execute() の組み合わせは、実際に SQL インジェクションを防ぐことができます。