匿名質問者

PDO・bindColumnについて

変数の場合bindParam、
値の場合bindValueを使えばいいようですが
bindColumnは具体的にはどのような場合に使うのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/04/18 14:40:05

回答1件)

匿名回答1号 No.1

(1)bindParam と bindValue はSQLに値を渡す際に利用するもの

bindParam は execute を実行する段階で値を取り込むため、
forなどで繰り返してexecuteを実行する際に便利。
実行するまで変数の状態を確認できないので、
あとから思わぬエラーが発生する場合もあったりして本番前テストは重要。

bindValue は bindValue を実行した段階で値を取り込むため、
未定義エラーなどの事前構文チェックができて便利。
慣れないなれないうちは全てbindValueにしてもいいかもしれない。

(2)bindColumn はSQLの実行結果から値を取り出す際に利用するもの

bindColumn で変数にバインドしなくても値は取り出せます

while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
    echo $row[0];
    echo $row[1];
    echo $row[2];
}
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['id'];
    echo $row['name'];
    echo $row['age'];
}

bindColumn を使うと好きな変数に割り当てられます。
見易さもさることながら処理速度的にも若干有利になります。
ただし、変数の数がそれだけ増えるということになりますので、
プログラム作成前に変数名のリストでも作ってしっかり管理しておかないと、
どれが何のための変数かわからなくなるかもしれません。

$stmt->bindColumn(1, $id);
$stmt->bindColumn(2, $name);
$stmt->bindColumn(3, $age);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
    echo $id;
    echo $name;
    echo $age;
}
$stmt->bindColumn('id', $id);
$stmt->bindColumn('name', $name);
$stmt->bindColumn('age', $age);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
    echo $id;
    echo $name;
    echo $age;
}

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません