Zend数据库插入行的最后一个ID。 (使用postgres)

时间:2012-10-23 21:32:54

标签: php zend-framework postgresql

好的,得到了​​这个查询(工作正常,插入全部......)

$db = Zend_Db_Table::getDefaultAdapter();
$data = array(
    "comment_id" => new Zend_Db_Expr("nextval('comments_comment_id_seq')"),
    "comment" => $comment,
    "comment_level" => 1,
    "is_active" => true,
    "status" => 0,
    "id" => $id,
    "user_id" => $_SESSION['role']['user_id'],
    "ts_create" => $created,
    "ts_mod" => $created
);
$db->insert($this->_name, $data);
$newID = $db->lastInsertId();

我甚至尝试过

$newID = $db->insert($this->_name, $data);

我无法获得ID的价值。它不是mysql(i)所以我认为那是我的第一个问题,因为postgres似乎没有像我习惯使用它的方式一样自动注释。所以我希望有人可以帮助我。无论如何要在新插入的项目上获得“comment_id”列id?因为现在我尝试使用lastInsertID,我得到的只是假或1,在任何一种情况下都是错误的。

3 个答案:

答案 0 :(得分:5)

好吧,GordonM向我指出了zend的特定文件的方向,通过阅读,我能够找到我需要的东西。不幸的是,没有人提供真正的答案。因此,我将回答我自己的问题,因为当他们陷入与我刚才相似的位置时,可能偶然发现它们。但是会向GordonM投票,让我朝着正确的方向前进。谢谢GordonM

更改:

$newID = $db->insert($this->_name, $data);

要:

$newID = $db->lastSequenceId('comments_comment_id_seq');

答案 1 :(得分:2)

Zend documentation开始,使用序列生成自动增量的数据库(如Postgres)要求您在lastInsertId()调用中按名称指定序列。

答案 2 :(得分:0)

自动递增字段在PostgreSQL中实现为序列,数据库在插入新值时从此序列中读取。在调用lastInsertId()以获取正确的值时,必须使用该序列的名称。