首頁 >php教程 >php手册 >php查询MongoDB遇到长整型的问题

php查询MongoDB遇到长整型的问题

WBOY
WBOY原創
2016-06-06 20:07:491061瀏覽

困扰了我一天的问题。首先是Mongodb副本集。查php的Mongo扩展手册把副本集搞定。然后又是长整型时间的问题。 存进mongo的是java的长整型时间戳。而php是弱类型语言,且php的时间戳是11位。目前还是10位的阶段。转换成java的时间戳需要在后面补零。 // 生成ja

困扰了我一天的问题。首先是Mongodb副本集。查php的Mongo扩展手册把副本集搞定。然后又是长整型时间的问题。

存进mongo的是java的长整型时间戳。而php是弱类型语言,且php的时间戳是11位。目前还是10位的阶段。转换成java的时间戳需要在后面补零。

// 生成java时间戳
$time = (string)$time.'000';
$time = (int)$time;

但是查询结果根本没有数据。把框架的Mongo用Debug打印出查询语句,没有问题。把查询语句直接在shell里查也没问题。但就是没数据。
后来打开Mongo的日志,调整级别为5,这样会记录查询语句。参照这里。

发现我所查询的时间都变成了负数:“{ $gt: -154503944 }

然后万能的google找到了答案。php的长整型需要使用MongoInt64这个类来转换一下。虽然你在php中输出结果是一样的,但查询起来就不一样了。那么在上面的语句后面再加上一句就对了。

// 必须的一步,将长整形使用MongoInt64转换成64位整型
$time = new MongoInt64($time);

Mongo扩展的类参考在这里:http://www.php.net/manual/en/mongoint64.construct.php

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn