【问题标题】:foreach bind value `Invalid parameter number` php pdoforeach绑定值`无效的参数号`php pdo
【发布时间】:2015-05-11 19:32:50
【问题描述】:

我有一个 foreach 绑定值,我总是得到 Invalid parameter number: number of bound variables does not match number of tokens,即使我有相同数量的参数,我猜它与我的 for each 有关,所以我将发布我的 foreach 代码。下面是我的 foreach 代码插入数据库。希望有建设性的cmets。

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();
    }

}

【问题讨论】:

    标签: php mysql pdo foreach


    【解决方案1】:

    这一行的问题

    $stmt7 - > execute();
    

    在 foreach 循环内。您应该首先初始化所有的 bindValues,然后使用执行。

    编辑:更具体地说,如何在您的代码中修复:

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

    如你所见 - OUT OF LOOP。

    【讨论】:

    • 先生,你建议我怎么做?
    猜你喜欢
    • 2017-01-31
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2017-04-25
    • 2016-05-12
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多