lastInsertId不和PostgreSQL合作(lastInsertId does not w

2019-06-24 06:05发布

我使用PostgreSQL,当我想用​​PDO来检索最新插入ID,我有一个问题。 这里是我的代码:

$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.

目前,“列名”是自动递增属性的字符串。 任何人都可以指出我哪里错了? 谢谢。

Answer 1:

PostgreSQL使用序列来生成值serial列和serial一般使用什么在PostgreSQL中“自动递增”列列。 序列具有名称,它们在一般情况下,独立于任何特定的表,所以你可以有一个序列来为几个不同的表的唯一ID; 该序列的名字是什么lastInsertId希望作为它的参数:

例如,PDO_PGSQL()要求您指定名称参数序列对象的名称。

通过创建的PostgreSQL序列对象被自动命名[table]_[column]_seq ,所以:

$id = $db->lastInsertId('tableName_columnName_seq');


Answer 2:

我今天就遇到了这个问题,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');


Answer 3:

因此, 序列名称ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');

这种格式实际解决问题的我!



Answer 4:

使用序列名称,而不是列名

$db->lastInsertId('columnName');


文章来源: lastInsertId does not work in Postgresql