我的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不会报告任何错误。
答案 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
);