我使用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.
目前,“列名”是自动递增属性的字符串。 任何人都可以指出我哪里错了? 谢谢。
PostgreSQL使用序列来生成值serial
列和serial
一般使用什么在PostgreSQL中“自动递增”列列。 序列具有名称,它们在一般情况下,独立于任何特定的表,所以你可以有一个序列来为几个不同的表的唯一ID; 该序列的名字是什么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');
因此, 序列名称将ingredients_id_seq
,
$db->lastInsertId('ingredients_id_seq');
这种格式实际解决问题的我!
使用序列名称,而不是列名
$db->lastInsertId('columnName');