パラメータ化されたクエリとは何ですか?そのようなクエリの例はPHPとMySQLでどのようになりますか?
4 に答える
パラメータ化されたクエリ(プリペアドステートメントとも呼ばれます)は、SQLステートメントを事前にコンパイルする手段であり、指定する必要があるのは、ステートメントに挿入する必要のある「パラメータ」(「変数」と考えてください)だけです。実行されます。これは、 SQLインジェクション攻撃を防ぐ手段として一般的に使用されます。
これらの詳細については、PHPのPDOページ(PDOはデータベース抽象化レイヤー)で読むことができますが、mysqliデータベースインターフェイスを使用している場合はそれらを利用することもできます(準備ドキュメントを参照)。
これは、それが何であるか、そしてそれがどのように機能するかについての明確で簡潔な説明です。パラメータ化を使用する方法と理由[アーカイブリンク] (元のリンクが無効になっているため)
重要なプロセスには、サーバーがパラメーターなしでリクエストを前処理することが含まれるため、サーバーはクエリのタイプを認識します。したがって、たとえば、SELECTクエリは単なるSELECTクエリであり、パラメータ(要求変数)によって連結してSELECT/DROPまたはその他のMySqlインジェクションにすることはできません。代わりに、インジェクションデータはパラメータフィールドの文字列データになります。
パラメータ化されたクエリは、プレースホルダーがパラメータに使用され、パラメータ値が実行時に提供されるクエリです。
パラメータ化されたクエリを使用する理由
- パラメータ化されたクエリを使用する最も重要な理由は、SQLインジェクション攻撃を回避することです。
- 次に、パラメーター化されたクエリは、フィールドにO'Bailyを挿入するなど、SQLクエリが失敗する可能性があるシナリオを処理します。パラメータ化されたクエリは、一重引用符を二重一重引用符に置き換えることなく、このようなクエリを処理します。
このステートメントは、同じSQLステートメントが高効率で繰り返し実行されるデータベースシステムの機能の1つです。プリペアドステートメントはテンプレートの一種であり、さまざまなパラメータを使用してアプリケーションで使用されます。参考記事
データベースシステムは、同じ種類のSQLステートメントに対して何度も解析、コンパイル、および最適化を行うことなく、同じSQLステートメントを実行できます。
MySQLでプリペアドステートメントを記述または作成できますが、プリペアドステートメントAPIを介したバイナリプロトコルの方が優れているため、これは効率的な方法ではありません。
しかし、それでも書くことができ、これでもSQLで直接書くことができる他のプログラミングは必要ありません。MySQLクライアントプログラムのプリペアドステートメントを使用できます。動的SQLアプローチのストアドプロシージャでプリペアドステートメントを使用することもできます。
MySQLでプリペアドステートメントを作成します。参照はこの記事から取得されます
PREPARE TestStmt FROM
'SELECT * FROM Test
WHERE TestNumber=?';
PHPコードを使用して、APIを介してプリペアドステートメントを管理したり、JDBCのレベルで管理したりできます。