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 () требует, чтобы вы указали имя объекта последовательности для параметра name.
Объект последовательности, созданный PostgreSQL, автоматически получает имя [table]_[column]_seq
, Так:
$id = $db->lastInsertId('tableName_columnName_seq');
Я столкнулся с этой проблемой сегодня, lastInsertId() возвращал только ложь. Нашел ответ, который решил мою проблему в другой теме: /questions/23325862/poluchit-poslednij-identifikator-vstavki-posle-podgotovlennoj-vstavki-s-pdo/23325875#23325875
CREATE TABLE ingredients (
id SERIAL PRIMARY KEY,
name varchar(255) NOT NULL,
);
Таким образом, имя последовательности будет ингридиентом_id_seq
$db->lastInsertId('ingredients_id_seq');
Таким образом , имя последовательности будет ingredients_id_seq
,
$db->lastInsertId('ingredients_id_seq');
Этот формат фактически решил мои проблемы!!!
Используйте имя последовательности вместо имени столбца
$db->lastInsertId('columnName');