2012-10-23 41 views
1

好,我知道這個查詢(工精細,插入一個全...)Zend數據庫插入行的最後一個ID。 (使用的是Postgres)

$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,無論哪種情況都是錯誤的。

回答

5

那麼GordonM指出我爲zend的一個特定文檔的方向,通過閱讀,我能夠找到我需要的東西。不幸的是,沒有人提供實際的答案。所以我會回答我自己的問題,對於那些可能偶爾遇到類似問題的人來說,我會遇到這樣的問題。但是,爲了讓我朝着正確的方向前進,GordonM將給予高票。由於GordonM

發生變化:

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

要:

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

的PostgreSQL提供'INSERT ... RETURNING',所以Zend公司真的應該使用以獲得生成的ID。也許你應該提交功能請求? –

+0

我可能只是這樣做,因爲它會很方便 – chris

2

Zend documentation中,使用序列生成自動增量的數據庫(如Postgres)要求您在lastInsertId()調用中按名稱指定序列。

0

自動遞增字段在PostgreSQL中作爲序列實現,數據庫在插入新值時從此序列中讀取。調用lastInsertId()以獲取正確的值時,必須使用該序列的名稱。

相關問題