プリペアドステートメント 【prepared statement】
概要
プリペアドステートメント(prepared statement)とは、プログラム上で動的にSQL文を生成する必要があるとき、可変部分を変数のようにしたSQL文をあらかじめ作成しておき、値の挿入は処理系に行わせる方式。実行効率を向上させ、SQLインジェクションを防止する効果がある。利用者が入力した値に基づいてデータベースに問い合わせたり操作するプログラムを開発する場合、SQL文を文字列操作によって実行時に動的に生成し、データベース管理システム(DBMS)に送るという処理がよく行われる。
この方法では、文字列としてのSQL文を解釈して実行可能なプログラムに変換(コンパイル)する処理が毎回必要となり、効率が悪い。また、悪意のある攻撃者がSQL文の一部として解釈可能な文字列を入力し、意図しない処理を実行させる「SQLインジェクション」攻撃に対して脆弱である。
プリペアドステートメントはSQL文の特定の箇所を変数のように後から変更できる状態(プレースホルダ)で記述された一種の雛形(テンプレート)で、事前にコンパイルされ高速に実行できる。値の挿入はSQL文の解釈とは別に言語処理系によって行われるため、入力文字列の一部を誤ってSQL文の一部として解釈する危険はない。
(2021.10.19更新)