繁体   English   中英

PHP PDO仅使用bindValue和bindParam插入数组的最后一个值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM