我正在尝试使用关联数组bindParams,通过foreach循环,但我不知道它以某种方式工作。我收到了这个错误:
SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
这是代码。变量$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);
答案 0 :(得分:6)
错误的发生是因为您在每次迭代时都在执行查询,但由于错误,它首先会停止。当它在第一次迭代时执行时,实际上只绑定了一个变量和一个令牌,因此计数错误并且您得到错误。你只需要将执行移出循环
foreach ($array as $key => $value) {
$key = ":" . $key;
$stmt1->bindParam($key, $value);
}
$stmt1->execute();
答案 1 :(得分:-2)
您正在使用每次迭代调用execute,因此仅使用一个实际绑定的变量触发它。
而不是那个循环只是将你的数组传递给执行
$stmt1 = $conn->prepare("INSERT INTO data($columns) VALUES ($values)");
$stmt1->execute($array);