8

我正在使用 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.

目前,“columnName”是该自动递增属性的字符串。谁能指出我哪里出错了?谢谢。

4

4 回答 4

17

PostgreSQL 使用序列serial列生成值,列serial通常用于 PostgreSQL 中的“自动递增”列。序列具有名称,并且通常独立于任何特定表,因此您可以让一个序列为多个不同的表生成唯一 ID;序列名称是lastInsertId它想要的参数:

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

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

$id = $db->lastInsertId('tableName_columnName_seq');
于 2012-05-08T04:40:17.410 回答
3

我今天遇到了这个问题,lastInsertId() 只返回 false。在另一个线程上找到了解决我问题的答案:https ://stackoverflow.com/a/31638196/1477123

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

所以序列名称将是成分_id_seq

$db->lastInsertId('ingredients_id_seq');
于 2016-02-16T19:14:40.540 回答
1

所以序列名称ingredients_id_seq

$db->lastInsertId('ingredients_id_seq');

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

于 2016-04-22T16:56:12.433 回答
-1

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

$db->lastInsertId('columnName');
于 2015-10-02T09:34:37.680 回答