PHP PDO bindParam падал в foreach

У меня была такая петля:

foreach($Fields as $Name => $Value){ $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); } 

Ничего сложного. Однако каждое значение было установлено последним в массиве ( $Fields ).

Как я могу это исправить?

Однако, благодаря этим парням . Я узнал, что вам нужно передать значение по ссылке с помощью & так далее:

 foreach($Fields as $Name => &$Value){ $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); } 

Это сводило меня с ума.

Фактическая цитата из PHP.net :

Вили 28-май-2010 12:01

Это работает ($ val по ссылке):

 <?php foreach ($params as $key => &$val){ $sth->bindParam($key, $val); } ?> 

Это не сработает ($ val по значению, потому что bindParam нуждается и переменная $):

 <?php foreach ($params as $key => $val) { $sth->bindParam($key, $val); } ?> 

Если вам не нужна возможность синхронизировать переменную с параметром bound перед выполнением запроса (что в 99,9% случаев, по моему опыту), вероятно, лучше просто использовать PDOStatement::bindValue() вместо PDOStatement::bindParam() :

 foreach ($Fields as $Name => $Value) { $Query->bindValue(':' . $Name, $Value, PDO::PARAM_STR); }