执行以下PHP代码时:

$m = new MongoClient("mongodb://localhost:27017");

我得到以下错误:

致命错误:(…)中未找到类"MongoClient"

MongoDB扩展似乎安装正确(我将php_mongodb.dll复制到ext文件夹并更新了php.ini).

PHP似乎确认扩展正在正常运行,因为下面的代码确认它已加载:

echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";

另外,phpinfo()表示mongodb扩展已经加载.


UPDATE:我的问题还没有解决.

phpinfo()清楚地表明驾驶员已加载:

enter image description here

但我仍然收到同样的致命错误.

推荐答案

TL;博士

MongoClient类是传统PECL包mongo的一部分,但不再是最新的mongodb包的一部分.

既然安装了mongodb扩展,而不是mongo扩展,这就是为什么会出现错误

Fatal error: Class 'MongoClient' not found

在MongoDB PHP驱动程序github repo上,关于版本1.0.0的发行说明建议开发人员使用MongoDB\Driver\Manager而不是MongoClient

Changes from our legacy mongo extension

最重要的是,遗留驱动程序的MongoClient、MongoDB和

Source:: 100

下面是the replacement class documentation条,以及应该取代你的代码片段:

$m = new MongoDB\Driver\Manager("mongodb://localhost:27017");

由于文档提示,该类已被弃用.

Warning此定义此类的扩展已弃用.相反

Source: 100


从我读到的on their github repository release history篇文章中,你try 使用的类已经从mongodb 1.0.0版本被淘汰了,所以,在1.6.0版本中,这个类甚至不再是dll的一部分.

这一点得到了this issue on their github%的证实

德里克于4月16日发表 comments

MongoClient是一个古老的遗留类

您需要安装旧的遗留扩展(pecl安装)

Source: 100


正如上面引用的MongoDB成员所建议的,另一种方法是使用pecl扩展名:https://pecl.php.net/package/mongo而不是https://pecl.php.net/package/mongodb,但请注意其中的警告:

该软件包已被取代,但仍保留有漏洞和安全修复程序.

Mongodb相关问答推荐

通过mongoDB中的查找从管道中删除被阻止的用户

如何使用ID数组对一个集合中的金额求和并更新另一个集合中的字段?

从MongoDB迁移到PostgreSQL:为PostgreSQL编写聚合管道查询

错误起草的 MongoDB 聚合管道 $match 阶段

lexik_jwt_authentication下无法识别的选项api_platform

Mongoose 更新不同类型的记录

将 MongoDB 转移到另一台服务器?

mongoose中的 required是什么意思?

删除嵌套文档数组中的嵌入文档

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

适用于 Windows 10 64 位的 MongoDB 下载

如何从 node.js 以编程方式执行 mongodump 命令?

如何在 MongoDB 聚合查询中使用 $hint?

Cannot connect to MongoDB errno:61

我如何使用 Twitter 的流 api 中的推文并将它们存储在 mongodb 中

无法连接到远程服务器上的 mongo

在mongoose中查询虚拟属性

spring 数据MongoDB.生成id的错误

PyMongo 创建具有 2 个或更多字段的唯一索引

MongoDB打印两点之间的距离