さらに多くの成熟したデータベースが準備済みステートメントの概念をサポートしています。 準備されたステートメントとは何ですか?これは、実行する SQL のコンパイルされたテンプレートと考えてください。変数パラメーターを使用してカスタマイズできます。
ステートメントの前処理には、次の 2 つの大きな利点があります。
Query It のみは一度解析 (または前処理) する必要がありますが、同じまたは異なるパラメーターを使用して複数回実行できます。 クエリの準備が完了すると、データベースはクエリを実行するための計画を分析、コンパイル、最適化します。 (推奨される学習: PHP ビデオ チュートリアル )
複雑なクエリの場合、このプロセスには長い時間がかかります。同じクエリを異なるパラメータで複数回繰り返す必要がある場合、プロセスはアプリケーションの速度が大幅に低下します。準備されたステートメントを使用すると、分析/コンパイル/最適化サイクルの繰り返しを回避できます。簡単に言えば、準備されたステートメントは使用するリソースが少ないため、より高速に実行されます。
準備されたステートメントに指定されたパラメーターは引用符で囲む必要はありません。ドライバーが自動的に処理します。 アプリケーションが準備されたステートメントのみを使用する場合、SQL インジェクションは発生しないことが保証されます。 (ただし、クエリの他の部分がエスケープされていない入力から構築されている場合は、依然として SQL インジェクションのリスクが存在します)。
準備されたステートメントは非常に便利ですが、その唯一の機能は、ドライバーがサポートしていない場合に PDO が処理をシミュレートすることです。これにより、データベースにそのような機能があるかどうかに関係なく、アプリケーションは同じデータ アクセス パターンを使用できるようになります。
プリペアド ステートメントを使用してデータを取得する
次の例では、指定されたキー値に基づいてデータを取得します。ユーザー入力は自動的に引用されるため、SQL インジェクション攻撃の危険はありません。
<?php $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); if ($stmt->execute(array($_GET['name']))) { while ($row = $stmt->fetch()) { print_r($row); } } ?>
データベース ドライバーがサポートしている場合、アプリケーションは出力パラメーターと入力パラメーターをバインドすることもできます。出力パラメーターは通常、ストアド プロシージャから値を取得するために使用されます。出力パラメータをバインドするときに、指定されたパラメータの長さを知っておく必要があるため、出力パラメータの使用は入力パラメータよりも少し複雑です。パラメータにバインドされた値が推奨される長さを超える場合、エラーが生成されます。
以上がPHPの前処理とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。