3

主キーが64ビットBigIntであるMySqlテーブルがあります

Zend_Db(Zend Framework 1.8.4)を使用して新しい行を挿入し、lastInsertId()を呼び出して新しい行のIDを取得しています。返されるのは、18446744072633694008などの非常に大きな数値であり、この数値は次のように変化します。時間ですが、常にこれほど大きいです。自動インクリメントインデックスは0に設定されており、データベースでは、レコードが実際に正しいプライマリID(0、1、2 ...)で挿入されています。これは、lastInsertId()から返されるIDが奇妙な数値を示すだけです。64ビット番号を処理しないZend_dbの既知の問題ですか?

環境:32ビットボックス上のZend Framework 1.8.4 Apache2、Ubuntu OS MySQL5.1 PHP5.2.4 MySQLアダプター:mysqli

ありがとう

4

2 に答える 2

3

これは、PHPのMysqliアダプターのオブジェクト指向実装のバグのようです。PHPのWebサイトでこのメモを参照してください。

一時的な一時的な解決策については、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私はZF1.0を介して多くのコードを開発しました。

PHPデータベース拡張機能は、整数ではなくPHP文字列を返します。これは、RDBMSがクライアントのPHPバイナリでサポートされている整数の範囲を超える数値データ型を使用している可能性が高いためです。

Zend_DbPHPデータベース拡張機能からフェッチした値を返すだけなので、奇妙な値が表示された場合は、おそらくPHPが原因であり、ではありませんZend_Db

インサートをテストするために単体テストを実行することをお勧めします。

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

これらのテストで行われたアサーションの1つは、からの戻り値lastInsertId()がPHP文字列型であるということです。

于 2009-08-13T23:24:03.153 に答える