ホームページ  >  記事  >  バックエンド開発  >  PHPの前処理とはどういう意味ですか?

PHPの前処理とはどういう意味ですか?

(*-*)浩
(*-*)浩オリジナル
2019-10-15 14:04:164078ブラウズ

さらに多くの成熟したデータベースが準備済みステートメントの概念をサポートしています。 準備されたステートメントとは何ですか?これは、実行する SQL のコンパイルされたテンプレートと考えてください。変数パラメーターを使用してカスタマイズできます。

PHPの前処理とはどういう意味ですか?

ステートメントの前処理には、次の 2 つの大きな利点があります。

Query It のみは一度解析 (または前処理) する必要がありますが、同じまたは異なるパラメーターを使用して複数回実行できます。 クエリの準備が完了すると、データベースはクエリを実行するための計画を分析、コンパイル、最適化します。 (推奨される学習: PHP ビデオ チュートリアル )

複雑なクエリの場合、このプロセスには長い時間がかかります。同じクエリを異なるパラメータで複数回繰り返す必要がある場合、プロセスはアプリケーションの速度が大幅に低下します。準備されたステートメントを使用すると、分析/コンパイル/最適化サイクルの繰り返しを回避できます。簡単に言えば、準備されたステートメントは使用するリソースが少ないため、より高速に実行されます。

準備されたステートメントに指定されたパラメーターは引用符で囲む必要はありません。ドライバーが自動的に処理します。 アプリケーションが準備されたステートメントのみを使用する場合、SQL インジェクションは発生しないことが保証されます。 (ただし、クエリの他の部分がエスケープされていない入力から構築されている場合は、依然として SQL インジェクションのリスクが存在します)。

準備されたステートメントは非常に便利ですが、その唯一の機能は、ドライバーがサポートしていない場合に PDO が処理をシミュレートすることです。これにより、データベースにそのような機能があるかどうかに関係なく、アプリケーションは同じデータ アクセス パターンを使用できるようになります。

プリペアド ステートメントを使用してデータを取得する

次の例では、指定されたキー値に基づいてデータを取得します。ユーザー入力は自動的に引用されるため、SQL インジェクション攻撃の危険はありません。

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET[&#39;name&#39;]))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

データベース ドライバーがサポートしている場合、アプリケーションは出力パラメーターと入力パラメーターをバインドすることもできます。出力パラメーターは通常、ストアド プロシージャから値を取得するために使用されます。出力パラメータをバインドするときに、指定されたパラメータの長さを知っておく必要があるため、出力パラメータの使用は入力パラメータよりも少し複雑です。パラメータにバインドされた値が推奨される長さを超える場合、エラーが生成されます。

以上がPHPの前処理とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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