(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; }