PDOStatement::bindParam() で一時変数を割り当ててはダメ
PDO パラメータライズド クエリーを利用する場合、bindParam() でパラメータをバインドする。
下記のコードではバインドが意図したようにできないので注意。
<?php $sql = "insert into users(user_id, user_name) values(:user_id, :user_name)"; $st = $pdo->prepare($sql); $params = array( ":user_id" => "1", ":user_name" => "foo", ); foreach($params as $k => $v){ $st->bindParam($k, $v); } ?>
問題は foreach の一時変数 $v を bindParam() に渡しても、変数の参照カウントが増えないため、foreach を抜けた途端 bindParam が参照しているパラメータが無効になってしまう。