foreach绑定值`Invalid parameter number`php pdo

foreach绑定值`Invalid parameter number`php pdo,php,mysql,pdo,foreach,Php,Mysql,Pdo,Foreach,我有一个foreach绑定值,我总是得到无效的参数编号:绑定变量的数量与令牌的数量不匹配,即使我有相同数量的参数,我猜这与我的for each有关,所以我将发布我的foreach代码。下面是我在数据库中插入的foreach代码。希望得到建设性的评论 foreach($material as $item) { $stmt7 = $dbh - > prepare("INSERT INTO material_tbl (id,floorone,floortwo,floorthree,flo

我有一个foreach绑定值,我总是得到
无效的参数编号:绑定变量的数量与令牌的数量不匹配
,即使我有相同数量的参数,我猜这与我的for each有关,所以我将发布我的foreach代码。下面是我在数据库中插入的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();
    }

}

这条线的问题

$stmt7 - > execute();
在foreach循环中。您应该首先初始化所有bindValue,然后使用execute

编辑:更具体地说,如何修复代码:

 foreach(....) {
 ....
 } else if ($key === 'roof') {
            echo "roof mat= ".
            "$value\n";
            $stmt7 - > bindValue(10, $value, PDO::PARAM_STR);
  }
}
$stmt7->execute();
....

正如您所看到的-不循环。

先生,您建议我怎么做?