lastInsertId не работает в Postgresql

Я использую Postgresql, когда я хочу использовать PDO для получения последнего идентификатора вставки, у меня проблема. Вот мой код:

$db->lastInsertId('columnName');

сообщение об ошибке говорит

SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "columnName" does not exist

Я думаю, у меня есть некоторое недопонимание относительно "объекта последовательности", указанного в руководстве PHP.

Note:

Returns the ID of the last inserted row, or the last value from a sequence object, 
depending on the underlying driver. For example, PDO_PGSQL() requires you to specify the 
name of a sequence object for the name parameter.

В настоящее время" columnName " является строкой этого автоматически увеличивающегося атрибута. Кто-нибудь может указать, где я ошибся? Спасибо.

4 ответов


PostgreSQL использует последовательности для генерации значений для serial столбцы и serial столбцы обычно используются для" автоматического увеличения " столбцов в PostgreSQL. Последовательности имеют имена и, как правило, не зависят от какой-либо конкретной таблицы, поэтому вы можете иметь одну последовательность, генерирующую уникальные идентификаторы для нескольких разных таблиц; имя последовательности-это то, что lastInsertId хочет в качестве аргумента:

например, PDO_PGSQL () требуется указать имя объекта последовательности имя


я столкнулся с этой проблемой сегодня, lastInsertId () возвращал только false. Нашел ответ, который решил мою проблему в другом потоке: https://stackoverflow.com/a/31638196/1477123

CREATE TABLE ingredients (
    id         SERIAL PRIMARY KEY,
    name       varchar(255) NOT NULL,
);

таким образом, имя последовательности будет ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');

Так имя последовательности будет ingredients_id_seq,

$db->lastInsertId('ingredients_id_seq');

этот формат фактически решил мои проблемы!!!


используйте имя последовательности вместо имени столбца

$db->lastInsertId('columnName');