返回lastInsertID时,“参数编号无效:没有绑定参数”

时间:2018-05-14 12:45:42

标签: php mysql pdo

我的插入语句如下所示:

   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 个答案:

答案 0 :(得分:2)

您需要在$parameters电话中添加execute,即

    $statement->execute($parameters);