mysql_real_escape_string() と同等の PDO
mysql_* から PDO へのコード移行では、mysql_real_escape_string() と同等のものを探しています。ただし、PDO には直接同等のものがないことに注意することが重要です。
技術的には、PDO::quote() は存在しますが、一般的には使用されておらず、mysql_real_escape_string() に匹敵するものではありません。
適切な MySQL インジェクション防止
プリペアド ステートメントで PDO を適切に使用すると、MySQL インジェクションに対する保護が得られます。準備されたステートメントは入力をサニタイズし、mysql_real_escape_string() のような関数の必要性を排除します。
準備されたステートメントを使用した安全なデータベース クエリの例
安全なデータベースの例は次のとおりです。 PDO 準備済みステートメントを使用したクエリ:
$db = new PDO( "mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [ PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ] ); // Prepared statement $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?"); // Execute statement $stmt->execute(array($_POST['color'])); // Fetch result $cars = $stmt->fetchAll(PDO::FETCH_ASSOC);
ご覧のとおり、$_POST['color'] をエスケープまたはサニタイズしていませんが、PDO と次の機能のおかげで、コードは MySQL インジェクションから安全なままです。準備されたステートメント。
追加メモ
結論
上で示したように準備されたステートメントを使用することは、mysql_* 関数に頼るよりも常に安全です。 PDO に組み込まれた保護メカニズムは、MySQL インジェクションを防ぐためのより堅牢で安全なアプローチを提供します。
以上がPDO プリペアドステートメントを使用して MySQL インジェクションを防ぐ方法: `mysql_real_escape_string()` と同等の PDO はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。