質問

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

役に立ちましたか?

解決

PHPのプリペアドステートメントとストアドプロシージャセクションマニュアルは、特にPDOに関連していますが、次のように述べている場合はこれを十分にカバーしています。

それらは一種のものと考えることができます SQL用にコンパイルされたテンプレート アプリケーションが実行したい、それは可能性があります 可変パラメータを使用してカスタマイズ。 準備されたステートメントは2つの主要なものを提供します メリット:

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

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

    それらの使用方法の具体例をお探しの場合は、上記のリンク先のページにコードサンプルも含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top