3

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

我使用 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 on 32bit box,Ubuntu OS MySQL5.1 PHP5.2.4 MySQL 适配器:mysqli

谢谢

4

2 回答 2

3

这似乎是 PHP 的 Mysqli 适配器的 OO 实现中的一个错误。请参阅 PHP 网站上的此注释。

对于临时的权宜之计,请尝试使用PDO_Mysql Zend_Db适配器。

我目前正在创建一个问题并研究解决方案,看看我是否可以在Zend_Db_Adapter_Mysqli. 我会根据我的进展保持这个答案的最新状态。

您可以在http://framework.zend.com/issues/browse/ZF-7590了解我在解决方法方面的进展

于 2009-08-13T23:30:45.650 回答
1

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

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

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

于 2009-08-13T23:24:03.153 回答