PHP PDO bindParam正在下降

Dav*_*ger 26 php pdo

我有一个这样的循环:

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

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

我该如何解决这个问题?

Dav*_*ger 46

但是,感谢这些家伙.我发现你需要通过引用传递值,&之前是:

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

这让我疯了.

来自PHP.net的实际报价:

Vili 28-May-2010 12:01

这工作(通过引用$ val):

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

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

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

  • 救了我的命.谢谢你找到了这个. (6认同)
  • 几乎把我的键盘撞到我的显示器上,这是为了保存它!:) (2认同)

FtD*_*Xw6 7

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

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