我的插入语句如下所示:
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
]);
我不确定它是为什么造成的。通常这发生在我所知的变量绑定没有发生的时候。但我没有修改那部分,并且在执行语句后返回完成。所以我很困惑。感谢帮助。
答案 0 :(得分:2)
您需要在$parameters
电话中添加execute
,即
$statement->execute($parameters);