Я использую 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» является строкой этого атрибута с автоинкрементами. Может ли кто-нибудь указать, где я ошибся? Благодарю.
PostgreSQL использует последовательности для генерации значений для serial
столбцов, а serial
столбцы, как правило, используются для столбцов «auto-incrementing» в PostgreSQL. Последовательности имеют имена и, в общем, не зависят от какой-либо конкретной таблицы, поэтому у вас может быть одна последовательность, генерирующая уникальные идентификаторы для нескольких разных таблиц; имя последовательности – это то, что lastInsertId
хочет в качестве аргумента:
Например, PDO_PGSQL () требует указать имя объекта последовательности для параметра name .
Объект последовательности, созданный PostgreSQL, автоматически называется [table]_[column]_seq
, So:
$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, );
Таким образом, имя последовательности будет component_id_seq
$db->lastInsertId('ingredients_id_seq');
Таким образом , имя последовательности будет ingredients_id_seq
,
$db->lastInsertId('ingredients_id_seq');
Этот формат фактически решил мои проблемы !!!
Использовать имя последовательности вместо имени столбца
$db->lastInsertId('columnName');