PHP PDO bindParam正在下降

时间:2012-08-27 15:01:43

标签: php pdo

我有一个这样的循环:

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

没什么复杂的。但是,每个值都设置为数组中的最后一个值($Fields)。

我该如何解决?

3 个答案:

答案 0 :(得分:45)

但是,感谢guys。我发现你需要通过引用传递值&之前:

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 by value,因为bindParam需要&amp; $ variable):

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

答案 1 :(得分:7)

如果您不需要在执行查询之前保持变量与绑定参数同步的能力(根据我的经验,99.9%的情况就是这种情况),那么简单地使用{{ 3}}而不是PDOStatement::bindValue()

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

答案 2 :(得分:-1)

还有一个讨厌的选项可以解决此问题。

您可以简单地遍历数组键,并使用以下键获取每个值作为参数:

foreach(array_keys($params) as $key) {
    $sth->bindParam($key, $params[$key]);
}