【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つずつ渡すしかないようです。

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ