如何使MongoDB PHP连接工作

时间:2016-02-03 21:23:22

标签: php mongodb connection

我在cPanel / WHM CentOS服务器上安装了MongoDB。 我安装了PHP驱动程序。 我打开了27017端口。

这有效$m = new MongoDB\Driver\Manager();

这些不起作用:

$m = new Mongo(); $m = new MongoClient();

两者都会产生Fatal error: Class 'Mongo' not found in ...Fatal error: Class 'MongoClient' not found in ...

有谁知道为什么?

不重复。 SO Q适用于Windows机器。我的服务器是Linux / CentOS

来自我的托管服务提供商的系统管理员

看起来“mongo”是来自“mongodb”的独立php模块,而“mongodb”是较新的:

root @ host [〜/ support / 642192] #pecl search mongo 检索数据... 0%

。匹配包,通道pecl.php.net:

包装稳定/(最新)本地 mongo 1.6.12(稳定)MongoDB数据库驱动程序(旧版)

mongodb 1.1.2(稳定)1.1.2用于PHP的MongoDB驱动程序

您是否需要传统模块“mongo”而不是“mongodb”?这是你所拥有的包的hte pecl页面:

https://pecl.php.net/package/mongodb

,这是遗留模块的一个:

https://pecl.php.net/package/mongo

3 个答案:

答案 0 :(得分:1)

您似乎尚未启用或安装php_mongo扩展程序。 启用后重新启动apache并检查phpinfo()以查看其是否正确启用。

答案 1 :(得分:1)

简短回答

您不能将以下类与新的mongodb驱动程序一起使用: $m = new Mongo(); $m = new MongoClient(); 这对应于旧版mongo驱动程序。相反,您应该通过MongoDB PHP库使用MongoDB\Client

长答案

好的。我在这个故事上也失去了一些头发,因为关于Mongo和PHP的文档非常令人困惑。然后选择是生气,秃头,或两者兼而有之。但我找到了勇气,终于明白了。所以这可能对你有帮助。

1。 MongoDB驱动程序:mongo vs mongodb

首先,您必须说明您使用的MongoDB 驱动程序mongo(旧版)或mongodb(新版)。请注意较小的情况。第一个混淆源,mongo驱动程序有时被称为MongoDB(传统)PHP驱动程序。

https://docs.mongodb.com/ecosystem/drivers/php/

第二个来源混淆,版本号不合逻辑,因为mongo驱动程序有1.5,1.6,但mongodb从1.0开始。所以,向前,但向后,它只是疯了...... Imo他们应该从2.0开始!

驱动程序的选择取决于您的PHP版本:

  • PHP5.3:您只能使用mongo旧版驱动程序(1.5,1.6)
  • PHP7.0:您只能使用新的mongodb驱动程序(1.1 +)
  • PHP5.4,5.5,5.6:在这里您可以选择旧mongo(1.5,1.6)或新mongodb(1.0,1.1 +)

但它尚未结束。驱动程序只是一个低级接口(又名PHP扩展)。现在我们来到程序员的API,它变得更糟。

2。 API:MongoClient与MongoDB \ Driver

混淆的第三个原因,低级驱动程序和API类具有重叠的名称。

  • mongo旧版驱动程序 - >类MongoClient,MongoDB(!),...
  • mongodb驱动程序 - >类MongoDB \ Driver,MongoDB \ BSON,...

但它还没有结束。可以直接使用旧的mongo驱动程序。新的mongodb驱动程序提供了类(例如MongoDB \ Driver),但它实际上是一个低级API。你不应该直接使用它,但它不方便。相反,你应该使用MongoDB PHP库,它提供类似于旧MongoClient类的API ......!

3。 MongoDB PHP库(使用mongodb) - >的MongoDB \客户端

https://docs.mongodb.com/php-library/master/

因此,如果您安装了mongodb,则应安装此MongoDB PHP库以使用MongoDB \ Client。该类应该与旧的MongoClient类似,但是存在一些差异,例如排序和投影。

要安装此库,建议您使用名为Composer的工具,它允许您将这些类下载到您的仓库中。然后使用随Composer提供的自动加载器。

在这里我们来到第四个混乱的源头,即使你在版本1.1中使用最后一个mongodb驱动程序,MongoDB PHP库也是从1.0版本的!对于那些开发这些内容但对lambda用户来说非常难以理解的人来说,这显然是显而易见的。疯狂混乱的东西。

司机上方还有许多其他图书馆,但我根本不了解它们,所以我不会更多地了解它们(https://docs.mongodb.com/ecosystem/drivers/php-libraries/)。

TL; DR

根据您的PHP版本,明确使用哪个MongoDB 驱动程序mongo(旧版)或mongodb(新版)?

  • mongo您可以直接使用MongoClient课程。
  • 使用mongodb您还应安装MongoDB PHP库以使用MongoDB\Client类。
祝你好运! :)

答案 2 :(得分:0)

您使用了正确的命名空间。作为stated in their docs,客户端的命名空间为MongoDB\Client。您也可以使用use这样的use MonogoDB\Client语句。