(PECL mongo >=0.9.0)
Mongo::__construct — 新しいデータベース接続オブジェクトを作成する
パラメータを省略した場合は、"localhost:27017" (あるいは php.ini の mongo.default_host と mongo.default_port で設定した場所) に接続します。
バージョン 1.0.2 以降、server には次のような形式も使えます。
mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db
mongodb:// で始まる部分が、 この形式の接続文字列であることを示します。
username と password を指定すれば、コンストラクタが接続を確立する際にデータベースへの認証を試みます。 ユーザ名とパスワードはオプションで、もし指定するならその後に @ を続けなければなりません。
少なくともひとつのホストを指定しなければなりません (ポートはオプションで、デフォルトは常に 27017 となります)。 そのあとに、接続させたいホストをいくつでも続けることができます。 ホスト名はカンマ区切りで並べ、少なくともひとつのホストへの接続が成功すれば コンストラクタは正常な結果を返します。 どのホストにも接続できなかった場合は MongoConnectionException をスローします。
ユーザ名とパスワードを指定したときには、認証先のデータベースも指定することになるでしょう。 db を省略した場合は "admin" を使います。
バージョン 1.0.2 より前は、server の先頭に mongodb:// を含めることはできませんでした。 また、ユーザ名やパスワードも設定できず、ホスト名もひとつしか設定できませんでした。 詳細は、以下の変更履歴を参照ください。
その時点での接続はしないことにした (オプション array("connect" => false) を渡した) 場合は、 データベースを操作する前に Mongo::connect() をコールしなければなりません。
<?php
$mongo = new Mongo("mongodb://localhost", array("connect" => false);
// MongoException をスローします。$mongo はまだ完全には初期化されていないからです
$mongo->selectDB("foo")->command(array("distinct" => "bar", "key" => "age"));
// これで成功します
$mongo->connect();
$mongo->selectDB("foo")->command(array("distinct" => "bar", "key" => "age"));
?>
サーバ名。
接続オプションの配列。現在使用できるオプションは次のとおりです。
"connect"
コンストラクタで接続を行うか。デフォルトは TRUE。
"persist"
持続的な接続を行うかどうか。これを設定すると、接続が持続的なものとなります。 文字列の値を接続 ID として使うので、 array("persist" => "foobar") で初期化した Mongo のインスタンスがふたつあれば、 それは同じデータベース接続をあらわします。一方、 array("persist" => "barbaz") で初期化したインスタンスは別のデータベース接続を使います。
"timeout"
ドライバがデータベースへの接続を試みる時間の長さ (ミリ秒単位)。
新しいデータベース接続オブジェクトを返します。
指定したすべてのホスト名へのデータベースへの接続に失敗した場合に MongoConnectionException をスローします。 指定したユーザ名やパスワードが間違っている場合にも MongoConnnectionException をスローします。
バージョン | 説明 |
---|---|
1.0.2 |
コンストラクタがオプションの配列を受け取るようになりました。
以前のバージョンでは、コンストラクタは以下のパラメータを受け取っていました。
|
例1 Mongo::__construct() でのペア接続の例
この例は、Mongo サーバのレプリカペアに接続する方法を示します。
<?php
// カンマ区切りのサーバ名をコンストラクタに渡します
$m1 = new Mongo("mongodb://www.example1.com,www.example2.com");
// データベースサーバがデフォルトポート (27017) 以外で動いている場合は
// ポートも指定します
$m2 = new Mongo("mongodb://www.example1.com:12345,www.example.com:54321");
// ふたつだけではなく、それより多くのサーバに接続することもできます
$m3 = new Mongo("mongodb://localhost:27017,localhost:27018,localhost:27019");
?>
例2 Mongo::__construct() での持続的接続の例
持続的な接続は、ひとつのリクエストだけでなく別のリクエストまでも持続します (普通は…。どの程度続くかはサーバ次第です)。 接続の再利用ができ、おおきな時間の節約になります。 接続は、時間のかかる処理だからです。
持続的な接続の識別は、サーバ文字列と ID 文字列で行います。
<?php
// 持続的な接続を作成します
$m1 = new Mongo("mongodb://localhost", array("persist" => ""));
// $m1 と同じ接続を使います
$m2 = new Mongo("mongodb://localhost", array("persist" => ""));
// 新しい接続を作ります
$m3 = new Mongo("mongodb://127.0.0.1", array("persist" => ""));
// 新しい接続を作ります
$m4 = new Mongo("mongodb://127.0.0.1:27017", array("persist" => ""));
// 新しい接続を作ります
$m5 = new Mongo("mongodb://localhost", array("persist" => "foo"));
// $m5 の接続を使います
$m6 = new Mongo("mongodb://localhost", array("persist" => "foo"));
?>
例3 Mongo::__construct() での認証の例
認証を使うには、admin データベースにユーザが存在しなければなりません。 Mongo シェルでユーザを作るには、次のようにします。
> use admin switched to db admin > db.addUser("testUser", "testPass"); { "_id" : ObjectId("4b21272fd9ab21611d19095c"), "user" : "testUser", "pwd" : "03b9b27e0abf1865e2f6fcbd9845dd59" } >
ユーザを作ったら、このユーザ名 "testUser" とパスワード "testPass" で次のようにして認証させることができます。
<?php
$m = new Mongo("mongodb://testUser:testPass@localhost");
?>