ホームページ >データベース >mysql チュートリアル >パラメータ化されたクエリは SQL インジェクションをどのように防ぐのでしょうか?

パラメータ化されたクエリは SQL インジェクションをどのように防ぐのでしょうか?

DDD
DDDオリジナル
2025-01-23 04:36:10822ブラウズ

How Do Parameterized Queries Prevent SQL Injection?

パラメータ化されたクエリ: SQL インジェクションに対するシールド

パラメータ化されたクエリについて

パラメータ化されたクエリは準備済みステートメントとも呼ばれ、SQL ステートメントを作成するための手法です。 これにより、動的データ (パラメーター) がクエリの固定部分から分離されます。これにより、実行時に効率的なパラメータ設定が可能になります。

PHP と MySQL: 実践的なデモンストレーション

ユーザーの電子メール アドレスのパラメーターを含む SQL クエリを使って説明してみましょう。

<code class="language-sql">SELECT * FROM users WHERE email = 'foo@example.com'</code>

mysqli による実装

<code class="language-php"><?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param('s', 'foo@example.com');
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    // Process the retrieved data...
}

$stmt->close();
?></code>

PDO による実装

<code class="language-php"><?php
$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bindParam(1, 'foo@example.com', PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();

foreach ($result as $row) {
    // Process the retrieved data...
}
?></code>

パラメータ化されたクエリの主な利点:

  • パフォーマンスの向上: クエリを事前コンパイルし、異なるパラメーターで再利用すると、パラメーター セットごとに新しいクエリをコンパイルする場合と比べて、効率が大幅に向上します。
  • 堅牢なセキュリティ: 主な利点は、SQL インジェクションの脆弱性に対する保護です。 クエリから変数を分離することで、悪意のあるユーザーによる有害なコードの挿入を防ぎます。

以上がパラメータ化されたクエリは SQL インジェクションをどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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