ホームページ >データベース >mysql チュートリアル >mysql_* 関数を PDO およびプリペアドステートメントに置き換える必要があるのはなぜですか?
mysql_* 関数を PDO とプリペアド ステートメントで置き換える
問題:
従来、 PHP 開発者は、データベース接続とデータ操作に mysql_* 関数を使用しました。ただし、これらの関数は安全ではなく、さまざまな攻撃に対して脆弱であると考えられています。
PDO とプリペアド ステートメント:
PDO (PHP Data Objects) はデータベース対話用の標準化されたインターフェイスです。強化されたセキュリティと柔軟性を提供します。 PDO 内の機能であるプリペアド ステートメントを使用すると、パラメータ化されたクエリが可能になり、SQL インジェクション攻撃を効果的に防止できます。
PDO とプリペアド ステートメントを使用する利点:
への接続PDO を使用したデータベース:
$host = 'host'; $user = 'user'; $pass = 'password'; $database = 'database'; try { $dbh = new PDO("mysql:host=$host;dbname=$database", $user, $pass); } catch (PDOException $e) { echo "Unable to connect: " . $e->getMessage(); exit; }
プリペアド ステートメントを使用したクエリの準備と実行:
プリペアド ステートメントを使用して ID によってユーザーをフェッチするには:
$user_id = $_GET['id']; $stmt = $dbh->prepare("SELECT * FROM `users` WHERE `id` = :user_id"); $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetchAll();
同様に、プリペアド ステートメントを使用してデータを挿入するには:
$username = $_POST['username']; $email = $_POST['email']; $stmt = $dbh->prepare("INSERT INTO `users` (username, email) VALUES (?, ?)"); $stmt->bindParam(1, $username, PDO::PARAM_STR); $stmt->bindParam(2, $email, PDO::PARAM_STR); $stmt->execute();
セキュリティに関する考慮事項:
プリペアド ステートメントは、SQL インジェクションに対して固有のセキュリティを提供します。クエリからのデータ。ただし、クロスサイト スクリプティング (XSS) やクロスサイト リクエスト フォージェリ (CSRF) などの他の脆弱性を防ぐために、入力データを適切に処理することが重要です。
以上がmysql_* 関数を PDO およびプリペアドステートメントに置き換える必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。