[英]PHP PDO only last value of array gets inserted using bindValue & bindParam
当执行以下代码时,仅将数组charlie
的最后一个值插入表中。
$this->array = $array; //Array ( [0] => alpha [1] => bravo [2] => charlie )
$query = "INSERT INTO test SET Name = :Name";
$sql = $this->conn->prepare($query);
foreach($this->array as $k => &$v) {
$sql->bindValue(":Name" , $v , PDO::PARAM_STR);
}
$sql->execute();
我也使用bindParam
得到相同的结果。
有人可以帮我指出我所缺少的吗?
我很困惑。
这仅执行具有最后一个值的插入,因为它是绑定到该语句的最后一个值。 在循环的每次迭代中调用execute。
foreach($this->array as $k => &$v) {
$sql->bindValue(":Name" , $v , PDO::PARAM_STR);
$sql->execute();
}
这是打算使用bindParam
方式:
$this->array = $array; //Array ( [0] => alpha [1] => bravo [2] => charlie )
$query = "INSERT INTO test SET Name = :Name";
$sql = $this->conn->prepare($query);
$sql->bindParam(":Name" , $value , PDO::PARAM_STR);
foreach($this->array as $value) {
$sql->execute();
}
也就是说,您将命名参数绑定到您的变量之一,因此每次执行查询时,命名参数将从当前变量值中获取其值。
相反,如果使用bindValue
,则每次需要更改命名参数值时都需要重新绑定:
$query = "INSERT INTO test SET Name = :Name";
$sql = $this->conn->prepare($query);
foreach($this->array as $v) {
$sql->bindValue(":Name" , $v , PDO::PARAM_STR);
$sql->execute();
}
bindParam
的优点是分配和传递的次数更少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.