我正在将 PDO 用于应用程序,但遇到 PDO bindParam() 问题。我有一个数组,我想使用 PDO bindParam() 循环或 for 将数组的值用于 foreach() ,但是 foreach() 得到了一个意想不到的结果。当我在 bindParam() 循环中使用 for 时,它​​运行良好。我试过的是

$con = $this->connection();
$stmt = $con->prepare($sql);

for($i = 0; $i < count($params); $i++){
   $stmt->bindParam($i + 1, $params[$i], PDO::PARAM_STR, 10);
}
$stmt->execute();
$result = $stmt->fetchAll();//$result is OK

但是当我在 bindParam() 中使用 foreach() 时,我得到了一个空的 array() 结果。代码下方
$con = $this->connection();
$stmt = $con->prepare($sql);

foreach($params as $key=>$val){ //Here
    $stmt->bindParam($key + 1, $val, PDO::PARAM_STR, 10);
}
$stmt->execute();
$result = $stmt->fetchAll(); //$result is an empty array

我想知道为什么会这样。我找不到原因。任何信息将不胜感激。

编辑: 我改用 bindValue() 解决了我的问题。

最佳答案

使用 bindValue() 而不是 bindParam()bindParam() 绑定(bind)到一个引用,因此当您执行查询时,所有参数都使用 $val 的最后一个值。

10-07 16:01