有没有办法在PHP中测试MongoDB连接?

时间:2017-05-15 10:46:07

标签: php mongodb

上下文

我有一个配置文件,其中我精确地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_stringMongoDB\Driver\Exception\InvalidArgumentException被抛出

  • mongodb://127.0.0.1:270(我的MongoDB的默认端口是27017),我没有看到任何错误

问题

有没有办法在PHP中测试与MongoDB数据库的连接?

2 个答案:

答案 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;
    }
}

}