データベースからデータを利用するとき、いつも同じSQL文を使えるわけではありません。状況によってユーザーが検索キーワードを入力し、それをもとにデータを抽出することもあります。その際、抽出するための条件をそのたびに設定しなくてはなりません。その場合、次のようにSQL文に直接条件を指定できます。
$sql = ‘SELECT * FROM Users WHERE Id=’ . $iddata;
(変数$iddataにユーザーが指定したIDが入っているとする)
そのほかにも条件を指定する方法があります。それがパラメータークエリです。パラメータークエリを利用するにはSQL文の条件の部分で、「:パラメーター名」もしくは「?」を割り当てておきます。
後で「:パラメーター名」に値を入れることにより、その時に応じたデータを抽出することができます。PDOクラスの「prepare」メソッドでパラペータークエリをセットし、PDOStatementクラスの「execute」メソッドで実行時にパラメーターと値のセットを配列で指定して実行します。
クラス名 | PDO |
---|---|
メソッド名 | prepare |
概要 | SQL文を実行する準備を行い、ステートメントオブジェクトを返す |
パラメーターリスト | |
パラメター名 | 説明 |
string $statement | string $statement パラメーター化したSQL文 |
返り値 | |
PDOStatement | 準備できた場合はPDOtatementオブジェクトを、準備できなかった場合はFALSEかPDOExceptionをスローする |
クラス名 | PDOStatement |
---|---|
メソッド名 | execute |
概要 | プリペアードステートメントを実行する |
パラメーターリスト | |
パラメター名 | 説明 |
array $input_parameters | パラメーター化したSQL文内で指定されるパラメーター |
返り値 | |
bool | 成功した場合はTRUEを、失敗した場合はFALSEを返す |
○ ファイル
「FetchClassTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | ParameterTest.php |
○ プログラム
次のようにプログラムを記述してください。
ParameterTest.php
○ 実行結果
○ 解説
25行目でパラメータークエリを指定しています。今回は「:userid」パラメーターを指定しています。Usersテーブルのid列で絞り込みを行います。「prepare」メソッドを実行すると戻り値で実行準備済みのPDOStatementオブジェクトが返ってきます。
28行目で実行をしています。実行時に「’:パラメーター名’ => 値」の形式で、パラメータークエリで指定したパラメーターすべてに値を指定します。すると、実行準備済みのSQL文が実行されます。その後、31行目にあるようにデータを読み込むことができます。
○ ファイル
「ParameterTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | ParameterTest2.php |
○ プログラム
次のようにプログラムを記述してください。
ParameterTest2.php
○ 実行結果
○ 解説
25行目で「?」を使ってパラメータークエリを指定しています。そして28行目でexecuteメソッドを呼び出すときに、「?」の数だけ、「?」の順番にデータを指定します。