PHP PDO只使用bindValue& amp;插入数组的最后一个值。 bindParam

时间:2017-10-17 14:03:13

标签: php mysql pdo

执行下面的代码时,只会在表中插入数组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获得相同的结果。

有人可以帮助我指出我失踪的东西。

我完全不知所措。

2 个答案:

答案 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的优点是分配和传递的次数减少了。