使用PHP在MongoDB上执行查询时出错

时间:2014-07-07 12:12:20

标签: php mongodb

我尝试使用PHP作为脚本语言来执行简单的插入查询。 但是,我在执行它时会收到以下错误实例。

array(2) { ["ok"]=> float(0) ["errmsg"]=> string(12) "unauthorized" }

我在本地计算机上编写了以下代码并且工作正常:

$mongoClient = new MongoClient('localhost');
$mongoDB=$mongoClient->test_db;
$mql='db.products.insert( { item: "card", qty: 15 } );';
$data=$mongoDB->execute($mql);
var_dump($data);die;

但是,当我在创建MongoClient对象时使用以下代码段在我的开发服务器上运行相同的代码时,我收到上述错误。

$mongoClient=new MongoClient('mongodb://username:password@dbServer:port/test_db');
$mongoDB=$mongoClient->test_db;
$mql='db.products.insert( { item: "card", qty: 15 } );';
$data=$mongoDB->execute($mql);
var_dump($data);die;

在同一个数据库服务器上,我可以通过shell执行相同的查询。 从代码我可以看到我试图选择数据库两次但是如果可能是错误我将完全混淆,我将如何消除它。 如果这不是错误,我找不到它。

我使用RackSpace云服务器和ObjectRocket(通过Rackspace)来使MongoDB实例具体,但是它不应该与问题有关。请帮帮我。

1 个答案:

答案 0 :(得分:0)

你没有使用PHP而是使用了JS,你使用PHP来调用MongoDBs eval命令。更高版本的MongoDB要求运行eval的用户对数据库进行完全和不受控制的访问(超级管理员)。

http://docs.mongodb.org/manual/reference/command/eval/

  

版本2.4中已更改:您必须具有完全管理员权限才能运行。

你应该做的不是使用eval:

$mongoDB->products->insert(['item' => 'card', 'qty' => 15])

喜欢这样

mql?它不是你正在编写的mongo查询语言,而是JavaScript。