«Неверный номер параметра: параметры не были связаны» при возврате lastInsertID - PullRequest
0 голосов
/ 14 мая 2018

Мой оператор вставки выглядел раньше так:

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

Теперь мне нужно вернуть идентификатор последней вставленной строки, так как у меня есть другая вставка, которая будет выполнена сразу после этой, с использованием этого нового идентификатора.Поэтому я изменил оператор вставки следующим образом:

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 голосов
/ 14 мая 2018

Вам необходимо добавить $parameters к вашему execute вызову, т.е.

    $statement->execute($parameters);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...