好的,我已经在MongoDB Atlas上建立了一个帐户,并创建了一个集群。 借助这些细节,我现在使用mongo shell连接到服务器。 成功导入了JSON文件,我可以在连接到集群后从集合中查询和检索数据(仅限Mongo控制台)。
问题是当我在我的PHP文件中使用连接url来获取和显示数据时,我无法这样做,每次它都给我致命的错误 -
致命错误:未捕获 MongoDB \ Driver \ Exception \ AuthenticationException:身份验证 失败。在 E:\ XAMPP \ htdocs中\ MongoDB的\ MongoAutoLoad \ MongoDB的\ MongoDB中的\ src \工作\ Find.php:280 堆栈跟踪:#0 E:\ XAMPP \ htdocs中\ MongoDB的\ MongoAutoLoad \ mongodb的\ mongodb的\ SRC \操作\ Find.php(280): 的MongoDB \驱动\服务器 - >的executeQuery(' test.bf&#39 ;, 对象(MongoDB \ Driver \ Query),Object(MongoDB \ Driver \ ReadPreference))
1 E:\ XAMPP \ htdocs \ mongoDB \ MongoAutoLoad \ mongodb \ mongodb \ src \ Collection.php(527): MongoDB \ Operation \ Find->执行(对象(MongoDB \ Driver \ Server))#2 E:\ XAMPP \ htdocs中\ MongoDB的\ bFreidan \ testCluster.php(8): MongoDB \ Collection-> find()#3 {main}引入 E:\ XAMPP \ htdocs中\ MongoDB的\ bFreidan \ MongoAutoLoad \ MongoDB的\ MongoDB中的\ src \工作\ Find.php 在第280行
Find.php只是用于获取和显示集合数据的PHP库代码。这可能是什么问题?
请注意,如果我在本地mongodb
中执行此代码,此代码工作正常这是我的PHP代码 -
<?PHP
require 'MongoAutoLoad/autoload.php'; // include Composer's autoloader
$client = new MongoDB\Client(
'mongodb://<ClusterUsername>:<ClusterPassword>@cluster0-shard-00-00-91fmq.mongodb.net:27017,cluster0-shard-00-01-91fmq.mongodb.net:27017,cluster0-shard-00-02-91fmq.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin
');
$collection = $client->test->bf;
$result = $collection->find( [ 'name' => $name, 'brewery' => $brewery ] );
foreach ($result as $entry) {
echo $entry['_id'], ': ', $entry['name'], "<br>"; //Print with ID
}
?>
答案 0 :(得分:0)
这里有两个可能的问题。
首先请确保您的PHP驱动程序与MongoDB服务器版本兼容。有关详细信息,请参阅PHP driver compatibility table。
您可以使用以下命令检查MongoDB PHP驱动程序版本:
php --ri mongodb | grep version
另一种可能性是您发送了错误/未编码的密码。如果密码包含特殊字符(即@:或%),则应在URI中对密码进行编码。有关详细信息,另请参阅MongoDB\Driver\Manager::__construct()和MongoDB\Client::__construct()。