2011-05-23 77 views
0

所以我試圖用Zend_Db_Adapter_Pdo_Mysql的insert()方法....Zend框架插入()和LAST_INSERT_ID()搞砸了

,然後之後,我發出的SELECT LAST_INSERT_ID();命令....

但那麼由於某種原因,該命令總是返回0而不是實際插入的ID ...

當我試圖使用正常的INSERT查詢,然後得到最後一個插入ID,它的工作原理很好,所以我想這是一些zend框架擰起來...

有人知道如何解決這個問題嗎? last insert id with zend db table abstract似乎不起作用

回答

1

Zend_Db_Adaptor文檔解釋

一些RDBMS品牌支持:

插入()如果成功,而不是ID,所以這種解決方法只返回1自動遞增主鍵。以這種方式定義的表在新行的INSERT期間自動生成主鍵值。 insert()方法的返回值不是最後插入的ID,因爲該表可能沒有自動遞增的列。相反,返回值是受影響的行數(通常爲1)。

如果你的表是用一個 自動遞增的主鍵定義,您可以撥打 的 插入後lastInsertId()方法。此方法返回當前數據庫連接在 範圍內生成的 最後一個值。

所以......

$id = $db->lastInsertId(); 

應工作

2

你提的問題是非常不清楚。儘管如此,我認爲至少有一部分問題是您從Zend_Db_Adapter_Abstract(或Zend_Db_Adapter_Pdo_Mysql)與Zend_Db_Table_Abstract中的插入方法混淆。這兩個類都有稱爲insert的方法,但它們的工作方式不同。從Zend_Db_Adapter_Abstract

insert方法返回的「的受影響的行的數目」,而從insert返回Zend_Db_Table_Abstract「的行的主鍵插入的」

您提供的鏈接正在使用來自Zend_Db_Table_Abstract的插入。但是,您似乎正在使用來自`Zend_Db_Table_Abstract的插入。出於這個原因,你總是得到1回報。

0

在ZF2你可以使用:

$id = $this->lastInsertValue;