PHP PDO bindParam 正在陷入困境

2022-08-30 15:36:27

我有一个这样的循环:

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 2010年5月28日 12:01

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

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

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

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

答案 2

如果你不需要在执行查询之前使变量与绑定参数保持同步的能力(根据我的经验,这种情况在99.9%的情况下都是如此),那么最好只使用PDOStatement::bindValue()而不是PDOStatement::bindParam()

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

推荐