我正在使用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()
解决了我的问题。
答案 0 :(得分:11)
使用bindValue()
代替bindParam()
。 bindParam()
绑定到引用,因此当您执行查询时,所有参数都使用$val
的最后一个值。
答案 1 :(得分:5)
如果您已经有数组中的项目,则没有理由在循环中调用$stmt->bindParam
;只是做:
$con = $this->connection();
$stmt = $con->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll();
执行准备好的声明。如果包括准备好的声明 参数标记,你必须:
调用PDOStatement :: bindParam()将PHP变量绑定到参数 标记:绑定变量将其值作为输入传递并接收 输出值(如果有)与其相关的参数标记
或传递一组仅输入参数值