根据问题:
PHP Postgres: Get Last Insert ID
他们已经声明检索最后一个插入ID的最佳方法是:
INSERT INTO ....
RETURNING id;
我想为Postgresql创建一个包装类,以便在运行时,例如:
$id = $db_wrapper->insert("INSERT...");
它将始终返回插入变量$id
的最后一个id。我不知道将传递给insert()
函数的查询的auto_inc列名称,我不希望在所有插入查询的末尾添加"RETURNING id"
- 有关如何使用的任何想法实现这个目标?
答案 0 :(得分:6)
RETURNING
INSERT INTO employee (lastname,firstname) VALUES ('Jain', 'Manish') RETURNING id;
我更喜欢这个,因为服务器上一次有数千个流量可能会在上一次调整或LASTVAL();时出错 Althogh它说这两个函数是并发的并且与单个会话一起工作但我认为
RETURNING id
更好,更安全。
优点:这是获取最后插入ID的非常基本和现实的方法, 直到1050条目一次进入才发现问题。 ;)位负载测试。
缺点:几乎没有,您可能需要修改调用INSERT语句的方式(在最坏的情况下,可能您的API或DB层不期望INSERT返回值);它不是标准的SQL(谁在乎);
答案 1 :(得分:5)
PostgreSQL将(默认情况下)创建一个名为' user_id_seq'的序列。例如,如果您的表名是user
。然后它是user_id_seq
然后您可以执行以下操作:
$strTable = "user";
$last_insert_id = $objPDO->lastInsertId("$strTable_id_seq");
查看多用户安全方法http://www.postgresql.org/docs/9.0/interactive/functions-sequence.html
查看其他方式 mysql_insert_id alternative for postgresql
编辑:根据 Eli的评论
//if your table name in model is **user**
$strTable = "user";
$model = new User();
// do your stuff
$model->save();
$last_insert_id = $model->lastInsertId("$strTable_id_seq");
或强>
如果你的模型被称为Model,并且有一个名为id的属性(也就是表的PK),那么你可以这样访问:
//...
$model = new Model();
// do your stuff....
$model->save();
$the_id = $model->id;
答案 2 :(得分:-1)
$po_curr_id = PurchaseOrder::select('purchase_orders')->max('id');