我有一个foreach绑定值,我总是得到Invalid parameter number: number of bound variables does not match number of tokens
即使我有相同数量的参数我猜它与我的每个都有关,所以我会发布我的foreach代码.Below是我的foreach用于插入数据库的代码。希望得到建设性的评论。
foreach($material as $item) {
$stmt7 = $dbh - > prepare("INSERT INTO material_tbl (id,floorone,floortwo,floorthree,floorfour,wallone,walltwo,wallthree,wallfour,roof) VALUES (?,?,?,?,?,?,?,?,?,?)");
$stmt7 - > bindValue(1, $id, PDO::PARAM_STR);
foreach($item as $key => $value) {
if ($key === 'floor 1st Floor') {
echo "1st floor mat= ".
"$value\n";
$stmt7 - > bindValue(2, $value, PDO::PARAM_STR);
} else if ($key === 'floor 2nd Floor') {
echo "2nd floor mat= ".
"$value\n";
$stmt7 - > bindValue(3, $value, PDO::PARAM_STR);
} else if ($key === 'floor 3rd Floor') {
echo "3rd floor mat= ".
"$value\n";
$stmt7 - > bindValue(4, $value, PDO::PARAM_STR);
} else if ($key === 'floor 4th Floor') {
echo "4th floor mat= ".
"$value\n";
$stmt7 - > bindValue(5, $value, PDO::PARAM_STR);
} else if ($key === 'wall 1st Floor') {
echo "2nd wall floor mat= ".
"$value\n";
$stmt7 - > bindValue(6, $value, PDO::PARAM_STR);
} else if ($key === 'wall 2nd Floor') {
echo "2nd wall floor mat= ".
"$value\n";
$stmt7 - > bindValue(7, $value, PDO::PARAM_STR);
} else if ($key === 'wall 3rd Floor') {
echo "3rd wall floor mat= ".
"$value\n";
$stmt7 - > bindValue(8, $value, PDO::PARAM_STR);
} else if ($key === 'wall 4th Floor') {
echo "4th wall floor mat= ".
"$value\n";
$stmt7 - > bindValue(9, $value, PDO::PARAM_STR);
} else if ($key === 'roof') {
echo "roof mat= ".
"$value\n";
$stmt7 - > bindValue(10, $value, PDO::PARAM_STR);
}
$stmt7 - > execute();
}
}
答案 0 :(得分:0)
这一行的问题
$stmt7 - > execute();
在foreach循环中。您应首先初始化所有bindValues,然后使用execute。
编辑:更具体地说明如何修复代码:
foreach(....) {
....
} else if ($key === 'roof') {
echo "roof mat= ".
"$value\n";
$stmt7 - > bindValue(10, $value, PDO::PARAM_STR);
}
}
$stmt7->execute();
....
如你所见 - OUT OF LOOP。