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

xzabzqsa  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(212)

我的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
]);

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

yzckvree

yzckvree1#

你需要加上 $parameters 给你的 execute 呼叫,即。

$statement->execute($parameters);

相关问题