28

我有一个这样的循环:

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

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

我该如何解决?

4

3 回答 3

53

不过,多亏了这些家伙。我发现你需要&像这样通过引用传递值:

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

这让我发疯了。

来自PHP.net的实际报价:

维利 2010 年 5 月 28 日 12:01

这有效($val 通过引用):

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

这将失败($val by value,因为 bindParam 需要 &$variable):

<?php
foreach ($params as $key => $val) {
    $sth->bindParam($key, $val);
}
?>
于 2012-08-27T15:01:43.280 回答
8

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

foreach ($Fields as $Name => $Value) {
    $Query->bindValue(':' . $Name, $Value, PDO::PARAM_STR);
}
于 2012-08-27T15:08:46.770 回答
-1

还有一个更讨厌的选择来摆脱这个问题。

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

foreach(array_keys($params) as $key) {
    $sth->bindParam($key, $params[$key]);
}
于 2019-04-02T14:28:36.433 回答