パラメータークエリ

 データベースからデータを利用するとき、いつも同じ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をスローする
prepareメソッドの仕様
クラス名 PDOStatement
メソッド名 execute
概要 プリペアードステートメントを実行する
パラメーターリスト
パラメター名 説明
array $input_parameters パラメーター化したSQL文内で指定されるパラメーター
返り値
bool 成功した場合はTRUEを、失敗した場合はFALSEを返す
executeメソッドの仕様

■ パラメーター名を指定して実行してみる

○ ファイル

 「FetchClassTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 ParameterTest.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

ParameterTest.php

  1. //データベースに接続する
  2. $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname .';charset=utf8;',
  3.  $username,
  4.  $password);
  5. //SQL文を準備する
  6. $statement = $pdo -> prepare('SELECT * FROM users WHERE id = :userid;');
  7. //SQL文を実行する
  8. $statement -> execute(array(':userid' => 1));
  9. //データを取得する
  10. $rows = $statement -> fetchAll(PDO::FETCH_CLASS, 'User');
  11. var_dump($rows);

○ 実行結果

実行結果
実行結果

○ 解説

 25行目でパラメータークエリを指定しています。今回は「:userid」パラメーターを指定しています。Usersテーブルのid列で絞り込みを行います。「prepare」メソッドを実行すると戻り値で実行準備済みのPDOStatementオブジェクトが返ってきます。

 28行目で実行をしています。実行時に「’:パラメーター名’ => 値」の形式で、パラメータークエリで指定したパラメーターすべてに値を指定します。すると、実行準備済みのSQL文が実行されます。その後、31行目にあるようにデータを読み込むことができます。

■ 「?」を指定して実行してみる

○ ファイル

 「ParameterTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 ParameterTest2.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

ParameterTest2.php

  1. //SQL文を準備する
  2. $statement = $pdo -> prepare('SELECT * FROM users WHERE id = ?;');
  3. //SQL文を実行する
  4. $statement -> execute(array(2));
  5. //データを取得する
  6. $rows = $statement -> fetchAll(PDO::FETCH_CLASS, 'User');

○ 実行結果

実行結果
実行結果

○ 解説

 25行目で「?」を使ってパラメータークエリを指定しています。そして28行目でexecuteメソッドを呼び出すときに、「?」の数だけ、「?」の順番にデータを指定します。

前へ   次へ