mysql_* から PDO に移行するプロセスでは、mysql_real_escape_string に直接相当するものが存在しないというジレンマに遭遇する可能性があります。
直接同等のものはありません
技術的には PDO::quote() がありますが、その使用は制限されています。真の解決策は、プリペアド ステートメントを正しく実装することにあります。
プリペアド ステートメントによるインジェクションの保護
PDO をプリペアド ステートメントと一緒に使用すると、本質的に、プリペアド ステートメントを使用せずに MySQL インジェクションから保護されます。追加のエスケープが必要です。プリペアド ステートメントは、入力パラメータをプレースホルダーにバインドし、悪意のある入力が SQL コマンドとして解釈されるのを防ぎます。
例: PDO でのプリペアド ステートメントの使用
次のコードは、安全なデータベースを示しています。プリペアド ステートメントを使用したクエリ:
<code class="php"><?php $db = new \PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [ PDO::ATTR_EMULATE_PREPARES => 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); } ?></code>
プリペアド ステートメントの利点
その他の考慮事項
結論
PDO のプリペアド ステートメントは、mysql_real_escape_string のような関数を必要とせずに、データベース クエリのための堅牢で安全なメカニズムを提供します。このアプローチを採用すると、SQL インジェクションを効果的に防止し、データの整合性を維持できます。
以上がPDO の mysql_real_escape_string を置き換える方法: 解決策として準備されたステートメント?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。