Подтвердить что ты не робот

PHP PDO bindParam падал в foreach

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Vili 28-May-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);
}
?>

Ответ 2

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

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