首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO bindParam不工作

PDO bindParam不工作
EN

Stack Overflow用户
提问于 2014-10-02 15:18:05
回答 2查看 1.7K关注 0票数 5

我在应用程序中使用PDO,但PDO bindParam()遇到了问题。我有一个数组,我希望使用PDO bindParam()的数组值,使用for循环或foreach(),但是foreach()得到了一个意想不到的结果。当我在bindParam()循环中使用for时,它工作得很好。我试过的是

代码语言:javascript
复制
$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()。以下代码

代码语言:javascript
复制
$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()解决了我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-02 15:22:44

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

票数 14
EN

Stack Overflow用户

发布于 2014-10-02 15:22:18

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

代码语言:javascript
复制
$con = $this->connection();
$stmt = $con->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll();

根据PHP文档

执行准备好的语句。如果准备好的语句包含参数标记,则必须: 调用PDOStatement::bindParam()将PHP变量绑定到参数标记:绑定变量将其值作为输入传递,并接收相关参数标记的输出值(如果有的话) 或者传递一个只输入的参数值数组。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26164076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档