ホームページ  >  記事  >  データベース  >  mysql_* から PDO に移行するときにユーザー入力をエスケープする方法は?

mysql_* から PDO に移行するときにユーザー入力をエスケープする方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 12:51:03496ブラウズ

 How to Escape User Input When Migrating from mysql_* to PDO?

mysql_real_escape_string と同等の PDO

質問:

mysql_* から PDO に移行する場合、mysql_real_escape_string と同等のものは何ですか? mysql_real_escape_string 関数?

答え:

mysql_real_escape_string とは異なり、PDO は準備されたステートメントを使用して自動エスケープを実行します。プリペアド ステートメントは、SQL クエリにユーザー入力を直接挿入する代わりに、プレースホルダ (例: ?) を使用して、SQL インジェクションの脆弱性を防ぎます。

例:

<code class="php">try {
    $db = new PDO(...);
} catch (PDOException $e) {
    echo "Error connecting to mysql: " . $e->getMessage();
}

if (isset($_POST['color'])) {
    $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
    $stmt->execute([$_POST['color']]);

    $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    var_dump($cars);
}</code>

この例では、$_POST['color'] はプリペアド ステートメントのパラメーターとして渡され、クエリをインジェクションから保護します。

追加の注意事項:

  • 常に含めますセキュリティのため、PDO 接続 DSN の charset=utf8 を使用します。
  • データベース エラーを適切に処理するために、例外に対する PDO エラー モード (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) を有効にします。
  • 注意してください古い MySQL バージョン (MySQL
  • PDO および SQL インジェクションの防止の詳細については、以下のリソースを参照してください。

詳細情報:

  • MySQL 開発者のための PDO チュートリアル

以上がmysql_* から PDO に移行するときにユーザー入力をエスケープする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。