我有一个配置文件,其中我精确地MongoDB connection string
。我想测试我的MongoDB连接,使用我的代码精确到开发人员,如果是这样的话他们的配置是坏的。
我使用MongoDB driver。
我没有找到关于Mongo连接测试的任何信息。
我做:
<?php
$configuration = parse_ini_file("../configs/database.ini");
$mongo = new MongoDB\Client($configuration['resources.mongo.dsn']);
$db = $mongo->stats;
但是,唯一抛出的错误是关于MongoDB connection string
格式错误的错误。例如:
test_bad_string
,MongoDB\Driver\Exception\InvalidArgumentException
被抛出
mongodb://127.0.0.1:270
(我的MongoDB的默认端口是27017
),我没有看到任何错误
有没有办法在PHP中测试与MongoDB数据库的连接?
答案 0 :(得分:6)
好的,我找到了测试它的方法!
<?php
$mongo = new MongoDB\Client('mongodb://my_server_does_not_exist_here:27017');
$dbs = $mongo->listDatabases();
如果连接失败,listDatabases
会抛出MongoDB\Driver\Exception\ConnectionTimeoutException
。您只需要在listDatabases
附近设置一个try / catch。
答案 1 :(得分:0)
您好,我正在查看上面的答案,并希望在我使用它时与人们分享简单的单例实现。只需在设置了变量的任何类中使用它,它将把该类转变为单例mongo db连接。
使用MongoDB \ Client; //使用的扩展名
特征MongoDbClient {
private static ?\MongoDB\Client $client = null;
/**
* @return Client
* the single function able to get the connection from, will check if the connection is alive and will route to the new instance factory method
*/
public static function getInstance(){
try {
if(self::$client instanceof Client){
self::$client->listDatabases();
return self::$client;
} else {
throw new \MongoDB\Driver\Exception\ConnectionTimeoutException("There is no connection yet");
}
} catch (\MongoDB\Driver\Exception\ConnectionTimeoutException $connectionTimeoutException){
return self::newInstance();
}
}
/**
* @return string
* creates a connection string based on the static properties available which this trait is used
*/
private static function getMongoDbConnectionUri():string
{
return 'mongodb://' . self::$user . ':' . self::$pass . '@' . self::$host . ':' . self::$port . '/?authMechanism=' . self::$authMechanism . '&authSource=' . self::$authSource;
}
/**
* @return Client
* sets and returns a new client but throws a exception if a new connection timeout occurs
*/
private static function newInstance(): Client
{
try {
self::$client = new Client(self::getMongoDbConnectionUri());
return self::$client;
} catch (\MongoDB\Driver\Exception\ConnectionTimeoutException $connectionTimeoutException){
throw $connectionTimeoutException;
}
}
}