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 () требует указать имя объекта последовательности для имя параметр.
Объект последовательности, созданный PostgreSQL, автоматически называется
[table]_[column]_seq
, Так что:$id = $db->lastInsertId('tableName_columnName_seq');
Я столкнулся с этой проблемой сегодня, 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');