生半可な気持ちでプログラマになった男日記

日々地獄の中をさまよっている糞雑魚プログラマの技術ブログ。テニスが好きです。

PDO の bindParam() について

いきなり記事の更新が止まってしまいました。

1週間に1記事は上げようと思ってるので、内容薄くても書いていくぞー。

今回は PDObindParam() でつまずいたのでメモがてら記事おこします。

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

実行結果

f:id:pachory:20180818020412p:plain

bindParam() 実行直後に変更した変数の内容が insert されてますね。

知らなかった。

そもそも bindValue() でいいやんって思いますが、どのタイミングで bindParam() 使うんでしょうかね。。

誰か優しい人教えてください。

関係ないけど。。

記事おこすと記憶の整理になるし、手を使って文章に残すので記憶に残りやすいですね。

しょうもない記事でもちょこちょこあげていくようにしよう。