У меня была такая петля:
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); }