我有一个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
由于
答案 0 :(得分:3)
这似乎是PHP的Mysqli适配器的OO实现中的一个错误。 See this note on PHP's website.
对于临时的,间隙解决方案,请尝试使用PDO_Mysql
Zend_Db
适配器。
我目前正在创建一个问题并制定解决方案,以确定我是否可以在Zend_Db_Adapter_Mysqli
中解决此问题。我会及时了解这个答案。
答案 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字符串类型。