Zend_Db last_insert_id返回超大数字

时间:2009-08-13 23:06:21

标签: mysql zend-framework zend-db

我有一个MySql表,其主键是64位BigInt

我正在使用Zend_Db(Zend Framework 1.8.4)插入一个新行,然后调用lastInsertId()来检索新行的id,我得到的是一个超大数字,例如18446744072633694008,这个数字改变了不时,但总是这么大。自动增量索引设置为0,并且在数据库中实际插入的记录具有正确的主ID,(0,1,2 ......),这只是从lastInsertId()返回的id给出了奇怪的数字。这是Zend_db的一个已知问题,它不处理64位数?

环境: Zend Framework 1.8.4 Apache2在32位盒子上, Ubuntu OS MySQL5.1 PHP5.2.4 MySQL适配器:mysqli

由于

2 个答案:

答案 0 :(得分:3)

这似乎是PHP的Mysqli适配器的OO实现中的一个错误。 See this note on PHP's website.

对于临时的,间隙解决方案,请尝试使用PDO_Mysql Zend_Db适配器。

我目前正在创建一个问题并制定解决方案,以确定我是否可以在Zend_Db_Adapter_Mysqli中解决此问题。我会及时了解这个答案。

您可以在http://framework.zend.com/issues/browse/ZF-7590

的解决方法上关注我的进度

答案 1 :(得分:1)

我通过ZF 1.0开发了很多Zend_Db代码。

PHP数据库扩展返回PHP字符串,而不是整数。原因是RDBMS可能使用的数值数据类型超出了客户端PHP二进制文件中支持的整数范围。

Zend_Db只返回从PHP数据库扩展中获取的值,因此如果您看到奇怪的值,那么可能是由于PHP,而不是Zend_Db

您可能希望运行单元测试来测试插入:

$ cd <zf>/tests
$ vi TestConfiguration.php   # enable the MySQL adapter you're using
$ phpunit --verbose --filter testAdapterInsert Zend/Db/AllTests.php

在这些测试中做出的一个断言是lastInsertId()的返回值是PHP字符串类型。