パラメーター化されたクエリとは何ですか?
-
11-10-2019 - |
質問
パラメーター化されたクエリとは何ですか?また、そのようなクエリの例はPHPとMySQLにありますか?
解決
パラメーター化されたクエリ(aとも呼ばれます 準備された声明)SQLステートメントを事前にコンパイルする手段であるため、提供する必要があるのは「パラメーター」(「変数」)を実行する必要があるため、実行する必要があります。一般的に防止する手段として使用されます SQLインジェクション攻撃.
これらの詳細については、PHPで読むことができます PDOページ (PDOはデータベース抽象化レイヤーです)が、MySQLIデータベースインターフェイスを使用している場合は、それらを利用することもできます(を参照 準備 ドキュメンテーション)。
他のヒント
これは、それが何であるか、どのように機能するかについての明確で簡潔な説明です。パラメーター化を使用する方法と理由
不可欠なプロセスには、サーバーがパラメーターなしでリクエストを事前に処理することが含まれているため、クエリのタイプがわかります。したがって、たとえば、選択クエリは選択クエリのみであり、選択 /ドロップまたは他のMySQLインジェクションとしてパラメーター(要求変数)で連結することはできません。代わりに、注入データはパラメーターフィールドの文字列データのみになります。
パラメーター化されたクエリは、プレースホルダーがパラメーターに使用され、パラメーター値が実行時に提供されるクエリです。
パラメーター化されたクエリを使用する理由
- パラメーター化されたクエリを使用する最も重要な理由は、SQLインジェクション攻撃を回避することです。
- 第二に、パラメーター化されたクエリは、フィールドにO'Bailyを挿入することでSQLクエリが失敗する可能性のあるシナリオを処理します。パラメーター化されたクエリは、単一の引用符をダブルシングル引用符で置き換えることを強制せずに、そのようなクエリをヘルディングします。
このステートメントは、同じSQLステートメントが高効率で繰り返し実行されるデータベースシステムの機能の1つです。準備されたステートメントは、1つのテンプレートの1つであり、異なるパラメーターを持つアプリケーションによって使用されます。参照記事
データベースシステムは、同じ種類のSQLステートメントについて、解析、コンパイル、最適化を行わずに同じSQLステートメントを実行できます。
MySQLで作成されたステートメントを作成または作成できますが、準備されたステートメントAPIを介したバイナリプロトコルの方が優れているため、これは効率的な方法ではありません。
しかし、それでも書くことができます。これでさえ、SQLで直接書くことができる他のプログラミングを必要としません。 MySQLクライアントプログラムに準備されたステートメントを使用できます。動的SQLアプローチのストアドプロシージャで準備されたステートメントを使用することもできます。
mysqlで準備されたステートメントを作成します: 参照はこの記事から取得されます
PREPARE TestStmt FROM
'SELECT * FROM Test
WHERE TestNumber=?';
PHPコードを使用して、APIを介して準備されたステートメントを管理したり、JDBCのレベルで管理したりできます。