检测到PHP Mongo Library溢出

时间:2017-01-21 14:11:16

标签: php mongodb

我的MongoDB PHP库存在问题。我试图在集合中找到一些东西,但却得到了这个错误。

Fatal error: 
Uncaught MongoDB\Driver\Exception\InvalidArgumentException: Integer overflow detected on your platform: 1484960424767 in C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Operation\Find.php:222 
Stack trace: 
#0 C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Operation\Find.php(222): MongoDB\Driver\Cursor->setTypeMap(Array) 
#1 C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Operation\FindOne.php(105): MongoDB\Operation\Find->execute(Object(MongoDB\Driver\Server)) 
#2 C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Collection.php(559): MongoDB\Operation\FindOne->execute(Object(MongoDB\Driver\Server)) 
#3 C:\xampp\htdocs\gameid\index.php(7): MongoDB\Collection->findOne(Array) 
#4 {main} Next MongoDB\Driver\Exception\InvalidArgumentException: Integer overflow detected on your platform: 1484960529934 in C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Operation\Find.php:222 
Stack trace: 
#0 C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Operation\Find.php(222): MongoDB\Driver\Cursor->setTypeMap(Array) 
#1 C:\ in C:\xampp\htdocs\gameid\vendor\mongodb\mongodb\src\Operation\Find.php on line 222

这是我的源代码:

$con = new MongoDB\Client('mongodb://user:pwd@ip:port/ripes');
$con = $con->ripes->games;

$result = $con->findOne(['gameID' => 'KUDl-xvjWkPJkjTRf-']);

有什么问题?如果id不存在任何条目,PHP不会报告任何错误。

1 个答案:

答案 0 :(得分:0)

我刚刚遇到了相同的 Integer overflow PHP异常。再次查看您的错误消息,它正确地告诉您导致异常的原因:

Integer overflow detected on your platform: 1484960424767

我能够使用Robo3T(RoboMongo)查看有问题的文档,并查看带有导致异常的值的字段(在您的情况下为1484960424767)。在MongoDB文档中,该字段被定义为NumberLong()类型,并且该值超过了PHP在您正在使用的版本上解析长整数的能力...很可能是32位PHP。如果可能的话,尝试使用64位PHP。

在我的情况下,文档字段应该是一个字符串,所以我不得不修改文档创建脚本以强制该值为字符串类型。

$doc = array(
             "field" => (string)$long_number_value
            );