MySQL では、PREPARE ステートメントはクライアント/サーバー バイナリ プロトコルを利用して、プレースホルダー「?」を含むクエリを MySQL サーバーに渡すことができます。PREPARE ステートメントを使用してプレースホルダーを含むクエリを実行すると、クエリの速度が向上し、ユーザーのクエリをより安全に。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
MySQL バージョン 4.1 より前では、クエリはテキスト形式で MySQL サーバーに送信されていました。その後、MySQL サーバーはテキスト プロトコルを使用してデータをクライアントに返します。 MySQL はクエリを完全に解析し、結果セットをクライアントに返す前に文字列に変換する必要があります。
テキスト プロトコルには重大なパフォーマンスの問題があります。この問題を解決するために、MySQL はバージョン 4.1 以降、prepare
というステートメントを追加して、いくつかの新機能を実装しました。
prepare
ステートメントは、クライアント/サーバー バイナリ プロトコルを利用します。次の例に示すように、プレースホルダー (?
) を含むクエリを MySQL サーバーに渡します。
SELECT * FROM products WHERE productCode = ?;
MySQL がこのクエリを別の productcode
値で実行すると、クエリを完全に解析する必要はありません。したがって、これにより、特に MySQL がクエリを複数回実行する場合に、MySQL がクエリをより高速に実行できるようになります。 prepare
ステートメントではプレースホルダー (?
) が使用されるため、これにより SQL インジェクションの問題が回避され、アプリケーションの安全性が少し高まります。
MySQL プリペアド ステートメントを使用するには、次のように他の 3 つの MySQL ステートメントを使用する必要があります。
PREPARE
DEALLOCATE PREPARE
次の図は、MySQL PREPARE ステートメントの例
PREPARE stmt1 FROM 'SELECT productCode, productName FROM products WHERE productCode = ?'; SET @pc = 'S10_1678'; EXECUTE stmt1 USING @pc; DEALLOCATE PREPARE stmt1;
PREPARE
ステートメントを使用して実行ステートメントを準備します。SELECT ステートメントを使用して、指定された製品コードに基づいて
products テーブルから製品データをクエリします。次に、製品コードのプレースホルダーとして疑問符 (
?) を使用します。
次に、製品コード変数
@pc
S10_1678 に設定されます。
次に、
EXECUTE
@pc に対して準備されたステートメントを実行します。
最後に、
DEALLOCATE PREPARE
PREPARE ステートメントを発行します。
[関連する推奨事項:
mysql ビデオ チュートリアル
以上がmysql prepare は何に役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。