好的,得到了这个查询(工作正常,插入全部......)
$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,在任何一种情况下都是错误的。
答案 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()以获取正确的值时,必须使用该序列的名称。