执行下面的代码时,只会在表中插入数组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
获得相同的结果。
有人可以帮助我指出我失踪的东西。
我完全不知所措。
答案 0 :(得分:4)
这只是执行带有最后一个值的插入,因为它是绑定到该语句的最后一个值。在循环的每次迭代中调用execute。
foreach($this->array as $k => &$v) {
$sql->bindValue(":Name" , $v , PDO::PARAM_STR);
$sql->execute();
}
答案 1 :(得分:3)
以下是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
的优点是分配和传递的次数减少了。