8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PDO の bindParam() で1時間悩まされた話

Posted at

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

実行結果

image.png

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

知らなかった。

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

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

8
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?