代码之家  ›  专栏  ›  技术社区  ›  Inception

返回lastInsertID时“参数编号无效:未绑定任何参数”

  •  -2
  • Inception  · 技术社区  · 6 年前

    我的insert语句前面是这样的:

       public function insert($table, $parameters)
        {
            $query = sprintf('insert into %s (%s) VALUES (%s)', $table, implode(', ', array_keys($parameters)), ':' . implode(', :', array_keys($parameters)));
            $statement = $this->pdo->prepare($query);
            return $statement->execute();
        }
    

    现在,我需要返回最后一个插入行的id,因为在这一行之后要使用这个新id执行另一个插入。因此,我将insert语句修改为:

    public function insert($table, $parameters)
    {
        $query = sprintf('insert into %s (%s) VALUES (%s)', $table, implode(', ', array_keys($parameters)), ':' . implode(', :', array_keys($parameters)));
        $statement = $this->pdo->prepare($query);
        $statement->execute();
        return $this->pdo->lastInsertId();
    }
    

    但当我运行它时,它给了我这个错误:

    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound 
    

    下面是函数调用部分:

    $productid = $app['database']->insert('products', [
        'name' => $name,
        'address' => $address,
        'city' => $city,
        'phone' => $phone,
        'zip' => $zip,
        'customerid' => $customer,
        'sno1'=> $serialnumber
    ]);
    

    我不知道为什么会这样。据我所知,通常在变量绑定没有发生时会发生这种情况。但我没有修改该部分,返回是在语句执行后完成的。所以我很困惑。感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nick    6 年前

    您需要添加 $parameters 到您的 execute 呼叫,即。

        $statement->execute($parameters);