7

mongodb に接続するパスワードが@mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db であると仮定username='abc'password='abc@123' 、php で次のような mongo db インスタンスを作成するとどうなりますか

$m = new Mongo('mongodb://[abc:abc@123@]localhost/abc');

次に、このようなエラーが発生します

致命的なエラー:「123@]localhost のホスト情報を取得できませんでした」というメッセージを含む例外「MongoConnectionException」がキャッチされない

次に、このタイプの問題を解決する方法..

4

3 に答える 3

9

オプション1

2番目の引数を介して資格情報をコンストラクターに渡しますMongo

$db = new Mongo('mongodb://localhost', array(
    'username' => 'abc',
    'password' => 'abc@123',
    'db'       => 'abc'
));

オプション2

MongoDB::authenticate()メソッドを使用する

$m = new Mongo();
$db = $m->abc;

$db->authenticate('abc', 'abc@123');

覚えておいてください...

この方法には大きな欠点があります。接続が切断されてから再接続すると、新しい接続は認証されません。URI形式を使用する場合、PHPドライバーは、新しい接続が確立されるたびにユーザーを自動的に認証します。

2014年の更新

直接インスタンス化Mongoすることは非推奨になりました。MongoClient代わりに、上記と同じ引数を使用することをお勧めします。例えば

$m = new MongoClient('mongodb://localhost', [
    'username' => 'abc',
    'password' => 'abc@123',
    'db'       => 'abc'
]);
于 2012-07-06T06:26:39.760 に答える
3

new Mongo(); の使用 問題を引き起こす可能性があります

「警告: このクラスをインスタンス化すると、E_DEPRECATED 警告が発行され、確認済みの書き込みがオフになります。」-php.com

MongoClient() を使用する

$m = new MongoClient("mongodb://testUser:testPass@localhost:myportnumber");
于 2013-11-22T12:53:54.827 に答える