web-dev-qa-db-ja.com

パラメータ化されたクエリとは何ですか?

パラメータ化されたクエリとは何ですか。そのようなクエリの例は、PHP and MySQL?

23
totalnoobs

パラメーター化されたクエリ(prepared statementとも呼ばれる)は、SQLステートメントをプリコンパイルする手段であるため、指定する必要があるのは「パラメーター"("変数 "を考えてください)実行するためにステートメントに挿入する必要があります。 SQLインジェクション攻撃 を防ぐ手段として一般的に使用されます。

これらの詳細については、PHPの PDOページ (PDOはデータベース抽象化レイヤー)で読むことができますが、mysqliデータベースインターフェイスを使用している場合は、これらを利用することもできます( prepare documentation)。

22
John Parker

これは、それが何であり、どのように機能するかを明確かつ簡潔に説明したものです。 パラメータ化の使用方法と理由

不可欠なプロセスには、サーバーがパラメーターなしで要求を前処理することが含まれるため、サーバーはクエリの種類を認識します。したがって、たとえば、SELECTクエリはSELECTクエリにすぎず、パラメータ(リクエスト変数)によって連結してSELECT/DROPまたは他のMySqlインジェクションにすることはできません。代わりに、注入データはパラメーターフィールドの単なる文字列データになります。

3
user945389

パラメーター化されたクエリは、プレースホルダーがパラメーターに使用され、実行時にパラメーター値が提供されるクエリです。

パラメータ化クエリを使用する理由

  1. パラメーター化されたクエリを使用する最も重要な理由は、SQLインジェクション攻撃を回避することです。
  2. 次に、パラメーター化されたクエリは、SQLクエリが失敗するシナリオを処理します。 O'Bailyをフィールドに挿入します。パラメータ化されたクエリは、一重引用符を二重の一重引用符に置き換えることを強制することなく、そのようなクエリを処理します。
2
user7193303

このステートメントは、同じSQLステートメントが高効率で繰り返し実行されるデータベースシステムの機能の1つです。準備されたステートメントは、テンプレートの一種であり、さまざまなパラメーターでアプリケーションによって使用されます。 参考記事

データベースシステムは、同じ種類のSQLステートメントに対して何度も解析、コンパイル、最適化を行うことなく、同じSQLステートメントを実行できます。

MySQLで準備済みステートメントを作成または作成できますが、準備済みステートメントAPIを介したバイナリプロトコルの方が優れているため、これは効率的な方法ではありません。

ただし、作成することはできますが、SQLで直接作成できる他のプログラミングは必要ありません。 MySQLクライアントプログラムの準備済みステートメントを使用できます。また、動的SQLアプローチのストアドプロシージャで準備済みステートメントを使用できます。

MySQLで準備済みステートメントを作成します。 参照はこの記事から取得されます

PREPARE TestStmt FROM 
'SELECT * FROM Test 
WHERE TestNumber=?';

PHPコードを使用して、APIを介して準備済みステートメントを管理したり、JDBCレベルで管理したりできます。

1
Anvesh