所以我尝试使用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似乎不起作用
答案 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();