平易な英語で説明されているパラメータ化されたクエリとは何ですか?
-
29-10-2019 - |
質問
誰かが私に平易な英語でパラメータ化されたクエリとは何か、SQLインジェクションを回避するためにMySQLデータベース用にPHPでそれを実装する方法を説明できますか?
解決
PHPの
それらは一種のものと考えることができます SQL用にコンパイルされたテンプレート アプリケーションが実行したい、それは可能性があります 可変パラメータを使用してカスタマイズ。 準備されたステートメントは2つの主要なものを提供します メリット:
クエリを解析するだけで済みます(または 準備済み)一度ですが、実行できます 同じまたはで複数回 さまざまなパラメータ。クエリが 準備が整うと、データベースは 分析、コンパイル、最適化 クエリの実行を計画します。ために このプロセスが取ることができる複雑なクエリ それが著しくなるのに十分な時間 ある場合はアプリケーションの速度を落とします 同じクエリを何度も繰り返す必要があります 異なるパラメータでの時間。沿って プリペアドステートメントを使用して アプリケーションは繰り返しを回避します サイクルの分析/コンパイル/最適化。この プリペアドステートメントが使用することを意味します リソースが少ないため、実行速度が速くなります。
プリペアドステートメントのパラメータ 引用する必要はありません。ドライバ これを自動的に処理します。もし アプリケーションは、準備されたもののみを使用します ステートメント、開発者は確信することができます SQLインジェクションが発生しないこと (ただし、他の部分の場合 クエリはで構築されています エスケープされていない入力、SQLインジェクションは まだ可能です。
それらの使用方法の具体例をお探しの場合は、上記のリンク先のページにコードサンプルも含まれています。