1

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

$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 并且我得到的只是 false 或 1,这两种情况都是错误的。

4

3 回答 3

5

好吧,GordonM 为我指明了 zend 的特定文档的方向,通过阅读该文档,我能够找到我需要的内容。不幸的是,没有人提供实际答案。因此,我将回答我自己的问题,因为当他们被困在与我刚刚相似的位置时可能会偶然发现它。但会投票给 GordonM,让我朝着正确的方向前进。谢谢戈登

改变:

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

至:

$newID = $db->lastSequenceId('comments_comment_id_seq');
于 2012-10-23T21:58:53.517 回答
2

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

于 2012-10-23T21:40:51.727 回答
0

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

于 2012-10-23T21:43:20.477 回答