0

パラメータ化されたクエリとは何か、SQL インジェクションを回避するために MySQL データベース用に PHP に実装する方法を平易な英語で説明できる人はいますか?

4

1 に答える 1

1

PHP マニュアルのプリペアド ステートメントとストアド プロシージャのセクションでは、特に PDO に関連していますが、次のように説明されています。

これらは、アプリケーションが実行したい SQL の一種のコンパイル済みテンプレートと考えることができ、変数パラメーターを使用してカスタマイズできます。プリペアド ステートメントには、次の 2 つの主な利点があります。

  • クエリは 1 回だけ解析 (または準備) する必要がありますが、同じまたは異なるパラメーターを使用して複数回実行できます。クエリが準備されると、データベースはクエリを実行するための計画を分析、コンパイル、最適化します。複雑なクエリの場合、同じクエリを異なるパラメーターで何度も繰り返す必要がある場合、このプロセスに時間がかかり、アプリケーションの速度が著しく低下する可能性があります。プリペアド ステートメントを使用することで、アプリケーションは分析/コンパイル/最適化のサイクルを繰り返さなくなります。これは、プリペアド ステートメントが使用するリソースが少なくなるため、実行速度が速くなることを意味します。

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

それらの使用方法の具体的な例を知りたい場合は、上記のリンクされたページにコード サンプルも含まれています。

于 2011-02-05T11:08:09.583 に答える