「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PDO の mysql_real_escape_string を置き換える方法: 解決策として準備されたステートメント?

PDO の mysql_real_escape_string を置き換える方法: 解決策として準備されたステートメント?

2024 年 10 月 31 日公開
ブラウズ:918

How to Replace mysql_real_escape_string in PDO: Prepared Statements as the Solution?

PDO での mysql_real_escape_string の置換

mysql_* から PDO に移行するプロセスで、mysql_real_escape_string に直接相当するものが存在しないというジレンマに遭遇する可能性があります。

]

直接同等のものはありません

技術的には PDO::quote() がありますが、その使用方法は限られています。真の解決策は、プリペアド ステートメントを正しく実装することにあります。

プリペアド ステートメントによるインジェクションの保護

PDO をプリペアド ステートメントと一緒に使用すると、本質的に、プリペアド ステートメントを使用せずに MySQL インジェクションから保護されます。追加のエスケープが必要です。プリペアド ステートメントは、入力パラメータをプレースホルダーにバインドし、悪意のある入力が SQL コマンドとして解釈されるのを防ぎます。

例: PDO でのプリペアド ステートメントの使用

次のコードは、安全なデータベースを示しています。準備されたステートメントを使用したクエリ:

 false,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
if ($_POST && isset($_POST['color'])) {
    $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
    $stmt->execute(array($_POST['color']));
    $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    var_dump($cars);
}
?>

プリペアド ステートメントの利点

  • 入力の自動エスケープ
  • SQL インジェクションの防止
  • セキュリティの向上とパフォーマンス

追加の考慮事項

  • セキュリティを強化するには、DSN 属性で charset=utf8 を使用します。
  • PDO 例外を有効にする (PDO ::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) を使用してエラー処理を行います。
  • 古い MySQL バージョン (mysql

結論

PDO のプリペアド ステートメントは、mysql_real_escape_string などの関数を必要とせずに、データベース クエリに対する堅牢で安全なメカニズムを提供します。このアプローチを採用すると、SQL インジェクションを効果的に防止し、データの整合性を維持できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3