zend框架insert()和LAST_INSERT_ID()搞砸了

时间:2011-05-23 10:45:19

标签: mysql sql zend-framework

所以我尝试使用Zend_Db_Adapter_Pdo_Mysql的insert()方法....

然后我发出了SELECT LAST_INSERT_ID();命令....

但是由于某种原因,该命令总是返回0而不是实际插入的ID ...

当我尝试使用普通的INSERT查询,然后获取最后一个插入ID时,它工作正常,所以我猜它是一些zend框架搞砸了......

有人知道怎么解决这个问题吗?

insert()方法只有成功而不是id才返回1,因此解决方案:last insert id with zend db table abstract似乎不起作用

4 个答案:

答案 0 :(得分:2)

你的问题很不清楚。尽管如此,我认为至少有一部分问题是您将Zend_Db_Adapter_Abstract(或Zend_Db_Adapter_Pdo_Mysql)中的插入方法与来自Zend_Db_Table_Abstract的方法混淆。这两个类都有称为insert的方法,但它们的工作方式不同。

来自insert

Zend_Db_Adapter_Abstract方法会返回“受影响的行数”,而来自insert的{​​{1}}会返回“插入行的主键“

您提供的链接是使用来自Zend_Db_Table_Abstract的插入内容。但是,您似乎正在使用来自Zend_Db_Table_Abstract的插入内容。因此,你总是获得1回报。

答案 1 :(得分:1)

Zend_Db_Adaptor文档说明

  

某些RDBMS品牌支持自动递增主键。以这种方式定义的表在新行的INSERT期间自动生成主键值。 insert()方法的返回值不是最后插入的ID,因为该表可能没有自动递增的列。相反,返回值是受影响的行数(通常为1)。

     

如果您的表定义为   自动递增主键,你可以   之后调用lastInsertId()方法   插入。这个方法返回   在范围内生成的最后一个值   当前的数据库连接。

所以......

$id = $db->lastInsertId();

应该工作

答案 2 :(得分:0)

在ZF2中你可以使用:

$id = $this->lastInsertValue;

答案 3 :(得分:0)

在ZF3和Zend Expressive中,这是唯一的方法:

$this->dbAdapter->getDriver()->getLastGeneratedValue();