【问题标题】:MongoDB: Fatal error: Class 'MongoClient' not foundMongoDB:致命错误:找不到类“MongoClient”
【发布时间】:2016-05-16 19:40:21
【问题描述】:

执行以下 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 扩展已加载。


更新:我的问题还没有解决。

phpinfo() 清晰显示驱动已加载:

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

【问题讨论】:

  • MongoDB != MongoClient
  • 非常感谢您澄清这一点!如何在 WIndows 上安装 PHP 的 MongoDB 库(官方说明仅适用于 Linux)?
  • 另外官方说明可以使用我没有的“pecl”命令...
  • 根据您的问题,您安装了 MongoDB。您现在只需要使用正确的类。 ;)

标签: php mongodb


【解决方案1】:

TL;DR

MongoClient 类是旧版 PECL 包 mongo 的一部分,但不再是最新版 mongodb 包的一部分。

由于您安装了 mongodb 扩展程序,而不是 mongo 扩展程序,这就是您收到错误的原因

Fatal error: Class 'MongoClient' not found

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

与我们旧版 mongo 扩展的变化

最重要的是,旧版驱动程序的 MongoClient、MongoDB 和 MongoCollection 类已被 MongoDB\Driver\Manager 类,是新的连接网关 并执行查询、命令和写入操作。

来源::https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.0

所以,这里是 the replacement class documentation 和应该替换你的代码的 sn-p:

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

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

警告 定义此类的扩展已被弃用。反而, 应该使用MongoDB 扩展名。此类的替代品 包括:

来源:http://php.net/MongoClient


根据我阅读的on their github repository release history,您尝试使用的类自mongodb 1.0.0 版本以来已过时,因此,在1.6.0 版本上,该类甚至不是@987654343 的一部分@ 了。

this issue on their github证实了这一点

derickr 于 4 月 16 日发表评论

MongoClient 是旧遗留的一个类 驱动程序,并且不应该在这个中可用。新司机 有 \MongoDB\Driver\Manager,并且,随附的库有 \MongoDB\客户端。

您要么需要安装旧的旧版扩展程序(pecl install mongo) 并使用 PHP 5.x,或者更新您的代码以使用这个新驱动程序的 类,因为旧驱动程序不适用于 PHP 7。有一个 升级指南在 http://mongodb.github.io/mongo-php-library/upgrade-guide/

来源:https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288


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

此软件包已被取代,但仍会针对错误和安全修复进行维护。

【讨论】:

  • 你是上帝派来的!
  • 非常感谢,有很多页面被称为“已弃用”并引用了另一个也已弃用的页面。PHP 手册中的示例显示“$m = new MongoClient()” '不再工作了,我也尝试了使用“$m = new MongoDB()”的机会,它也不起作用。所以这解决了我的问题。谢谢。
  • 你值得拥抱!
【解决方案2】:

MongoDB(mongo-php-library) 和 MongoClient(ext-mongo) 是不同的扩展。 MongoClient 扩展已弃用。如果你想使用 MongoClient(ext-mongo) 相关的类,使用这样的包装器;

https://github.com/mitsh/mongo-php-adapter

在 mongo-php-library 之上提供 ext-mongo 接口的适配器

您无需对项目进行任何更改。只需安装并包含在 composer 中即可。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
猜你喜欢
  • 2015-06-16
  • 1970-01-01
  • 2015-04-04
  • 2017-09-02
  • 1970-01-01
  • 2023-03-07
  • 2014-01-07
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多