【PHP】PDO関数でSQLiteを使ってみた(3)
2008.06.06 Author: えす
前回は値の取得、トランザクションの使用方法などを記述しましたので、今回は
「SQL文で取得したカラムを変数にバインドする方法」、「SQL文内のパラメータに値をバインドする方法」を紹介します。
【SQL文で取得したカラムを変数にバインド】
取得したカラムを変数にバインドするには、 PDOStatement::bindColumn を使用します。
$sql = $db->prepare(" SELECT user_id, name FROM t_user ");if (! $sql->execute()) {
die('Failed');
}// カラム番号でバインド
$sql->bindColumn(1, $user_id);
// カラム名でバインド
$sql->bindColumn('name', $name);$sql->fetch(PDO::FETCH_BOUND);
echo sprintf("user_id:%s\r\n", $user_id);
echo sprintf("name:%s", $name);
user_id:1 name:えす
PDOStatement::fetch で「 FETCH_BOUND 」を指定することで、カラムが変数にバウンドされます。
1フィールドだけ取得したいときなどに使用すると便利です。
【SQL文内のパラメータに値をバインド】
$user_id = 2; $sql = $db->prepare(" SELECT * FROM t_user WHERE user_id = :user_id "); // :user_idに変数を指定 $sql->bindParam(':user_id', $user_id, PDO::PARAM_INT);if (! $sql->execute()) {
die("Failed");
}var_dump($sql->fetchAll(PDO::FETCH_ASSOC));
bindParamでのパラメータ指定はカラム番号指定でも可能です。
$sql->bindParam(':user_id', $user_id, PDO::PARAM_INT);
↓
$sql->bindParam(1, $user_id, PDO::PARAM_INT);
ちなみにパラメータに渡す値が変数でないとエラーになってしまいます。
× bindParam(':user_id', 1, PDO::PARAM_INT);
値を直接渡したいときには PDOStatement::bindValue を使用してください。
$sql->bindValue(':user_id', 1, PDO::PARAM_INT);
バインドは渡す値が少なければいいが、何十個もあった場合に1つずつ記述するのはつらいです。
配列などでまとめて渡す方法などを探してみましたが、今のところそういった方法はなく
1つずつ渡すしかないようです。