I had a case to use bind parameter of PDO statement inside loop. This was code that I used
[php] foreach ($this->data as $key => $value) { $st->bindParam(':' . $key, $value); } $st->execute(); [/php]
I executed this code and got surprising result, it didn't work. Apparently, PDO statement use $value with last looping value. I took a look at PHPDoc for bindParam() and found why this could be happened.
...The variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
bindParam() use reference not real value. In order to solve this, we can add & to $value, so it becomes
[php] foreach ($this->data as $key => &$value) { // add & $st->bindParam(':' . $key, $value); } $st->execute(); [/php]
or alternative solution is using bindValue(), then the code become
[php] foreach ($this->data as $key => $value) { $st->bindValue(':' . $key, $value); // change to bindValue() } $st->execute(); [/php]
Hope it helps :)
