具有关联数组的 pdo bindParam

pdo bindParam with associative array

我正在尝试使用关联数组绑定参数,通过 foreach 循环,但我无法以某种方式使其工作。我收到此错误:

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

这是代码。 var $columns$values 也来自数组,经过处理后它像 x, x, x:x, :x, :x

一样接受它们
$stmt1 = $conn->prepare("INSERT INTO data($columns) 
VALUES ($values)");
foreach ($array as $key => $value) 
{
    $key = ":" . $key;
    $stmt1->bindParam($key, $value);
    $stmt1->execute();  
}

我很确定列正在处理数组中的键。

编辑:更多代码

$values = '';
$columns = implode(',', $array);
foreach($array as $key)
{
    $values .= ":" . $key . ",";
}
$values = substr($values , 0, -1);

您在每次迭代中都调用了 execute,因此只有一个实际绑定的变量被触发。

不用循环,只需将数组传递给 execute

$stmt1 = $conn->prepare("INSERT INTO data($columns) VALUES ($values)");
$stmt1->execute($array);  

此外,您的密码是 prone to sql injection through column names

报错是因为你每次迭代都在执行查询,但是一开始就因为报错停止了。当它确实在第一次迭代中执行时,您实际上只绑定了一个变量和一个标记,因此计数是错误的并且您得到了错误。您只需要将执行移出循环

foreach ($array as $key => $value) {
    $key = ":" . $key;
   $stmt1->bindParam($key, $value); 
} 
$stmt1->execute();