PDO bindParam 在 foreach 中不起作用

PDO bindParam not working in foreach

提问人:MH2K9 提问时间:10/2/2014 最后编辑:MH2K9 更新时间:11/4/2014 访问量:1825

问:

我正在用于应用程序,但遇到了问题。我有一个数组,我想使用数组的值来使用循环,或者但意外的结果是。当我在循环中使用时,它工作正常。我尝试的是PDOPDO bindParam()PDO bindParam()forforeach()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()

php mysql pdo

评论

1赞 Jez 10/2/2014
在哪里定义?$params
0赞 MH2K9 10/2/2014
@Jez 它来自函数参数!

答:

6赞 TML 10/2/2014 #1

如果数组中已经有项,则没有理由在循环中调用;只需做:$stmt->bindParam

$con = $this->connection();
$stmt = $con->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll();

根据 PHP 文档

执行预准备语句。如果准备好的语句包括 参数标记,则必须:

调用 PDOStatement::bindParam() 将 PHP 变量绑定到参数 标记:绑定变量将其值作为输入传递并接收 其关联参数标记的输出值(如果有)

或传递仅输入参数值的数组

15赞 Barmar 10/2/2014 #2

use 代替 . 绑定到引用,因此在执行查询时,所有参数都使用 的最后一个值。bindValue()bindParam()bindParam()$val

评论

0赞 Tibor B. 10/2/2014
我正要发布这个。这是正确答案。
0赞 Barmar 10/2/2014
bindValue()没有参数。您的查询是否有必要?driver_options
0赞 Janie 7/7/2017
@Barmar如何在执行之前显示完整的 SQL 查询字符串?
0赞 Barmar 7/8/2017
@Janie 查看 stackoverflow.com/questions/210564/...