【问题标题】:Zend Database Last ID of inserted row. (Using postgres)Zend 数据库插入行的最后一个 ID。 (使用 postgres)
【发布时间】:2012-10-13 22:15:16
【问题描述】:

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

$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,这两种情况都是错误的。

【问题讨论】:

    标签: php zend-framework postgresql


    【解决方案1】:

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

    变化:

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

    收件人:

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

    【讨论】:

    • PostgreSQL 提供INSERT ... RETURNING,所以 Zend 应该真正使用它来获取生成的 ID。也许您应该提出功能请求?
    • 我可能会这样做,因为它会很方便
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-06
        • 2012-07-26
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多