PDO
の bindParam()
でつまずいたのでメモがてら記事おこします。
bindParam() は参照渡し
PDO プリペアドステートメントで bindParam()
と bindValue()
という2つのメソッドがあります。
bindParam()
の場合、引数で渡している変数が参照渡しでバインドされるそうです。
PHP: PDOStatement::bindParam - Manual
準備された SQL ステートメント中で、 対応する名前もしくは疑問符プレースホルダにパラメータをバインドします。 PDOStatement::bindValue() と異なり、 変数は参照としてバインドされ、PDOStatement::execute() がコールされたときのみ評価されます。
参照渡しの為、↓みたいな感じで bindParam()
を実行した後に引数で渡してる変数を変更すると、最後の変更結果が DB に保存されます。
<?php
...
$sth = $dbh->prepare('INSERT INTO users SET firstName = :firstName, lastName = :lastName');
$firstName = 'firstName';
$lastName = 'lastName';
$sth->bindParam(':firstName', $firstName, PDO::PARAM_STR);
$sth->bindParam(':lastName', $lastName, PDO::PARAM_STR);
$firstName = 'ruka';
$lastName = 'pachory';
$sth->execute();
実行結果
bindParam()
実行直後に変更した変数の内容が insert されてますね。
知らなかった。
そもそも bindValue()
でいいやんって思いますが、どのタイミングで bindParam()
使うんでしょうかね。。
誰か優しい人教えてください。