2011-05-23 80 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;