プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、PDOで変数をバインドする
結論から書けば

$pdo = new PDO($dsn, $user, $pwd);

でDBに接続したと仮定して

$stmt = $pdo->prepare($sql);

でクエリを準備したとして

■値をプレースホルダにバインド
$stmt->bindValue(':hoge', 'ほげ1');

■変数をプレースホルダにバインド
$stmt->bindParam(':hoge', $val01);

■カラムを変数にバインド
$stmt->bindColumn('column1', $val01);

です。

「bindValue()」と「bindParam()」はSQLに記述したプレースホルダに
値や変数をバインドするときに使います。

$sql = 'INSERT into tbl_test01 (column_varchar01, column_varchar02) VALUES (:column_varchar01, :column_varchar02)';
$stmt = $pdo->prepare($sql);

//bindValue
$val01 = "ほげ1";
$stmt->bindValue(':column_varchar01', $val01);

//bindParam
$val02 = "";
$stmt->bindParam(':column_varchar02', $val02);
$val02 = "ほげ2";

//実行
$ret = $stmt->execute();
if (!$ret) {
    die('INSERT 失敗');
}

のような使い方です。
「bindValue()」と「bindParam()」の違いは「PHP、PDOの「bindValue」と「bindParam」の違い」を
ご覧ください。

「bindColumn()」はカラムを変数にバインドするときに使います。
……と言っても「何のこっちゃいな?」ですかね。
「bindColumn()」は検索時に使います。
フェッチしたタイミングでバインドした変数に対応するカラムの値が入ってくるのです。
例えば

//検索
$sql = 'SELECT * FROM tbl_test01;';
$stmt = $pdo->prepare($sql);
$stmt->execute();

//bindColumn
$stmt->bindColumn('column1', $cals1);

//結果取得
while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
    print $cals1 . "<br>\n";
}

のような使い方をしますよ。

$stmt->bindColumn('column1', $cals1);

の部分でカラム「column1」を変数「$cals1」にバインドしています。
そして

while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {

の部分でフェッチする度に「$cals1」の値はフェッチした行のカラム「column1」の値に
自動的に書き換わるのです。
フェッチした行が「$data」に入ると同時に、その行のcolumn1の値が「$cals1」に入るイメージですね。
気を付けないとバグりそうですが、便利は便利そうな奴です、bindColumn()さん。

最後にもう一度まとめると

■値をプレースホルダにバインド
$stmt->bindValue(':hoge', 'ほげ1');

■変数をプレースホルダにバインド
$stmt->bindParam(':hoge', $val01);

■カラムを変数にバインド
$stmt->bindColumn('column1', $val01);

です。

PDOのバインドあれこれ、これにて完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:PDO  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事