PHP PDO bindParam падал в foreach У меня была такая петля: foreach($Fields as $Name => $Value){ $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); } Ничего сложного. Однако каждое значение было установлено последним в массиве ($Fields). Как я могу это исправить? Ответ 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); }
Ответ 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); }