我有这两个代码用于连接到 mongodb。
首先我使用了这段代码,但这似乎不起作用。我不知道为什么。
class DbConnection
{
static $db = NULL;
static function getMongoCon()
{
if (self::$db === null)
{
try {
$m = new Mongo("mongodb://username:password@localhost:27017");
} catch (MongoConnectionException $e) {
die('Failed to connect to MongoDB '.$e->getMessage());
}
self::$db = $m;
}
else
{
return self::$db;
}
}
}
在此之后我用这种方式在另一个类中连接 mongo
$db=DbConnection::getMongoCon();
$database=$db->databasename;
$collection=$db->users;
但这似乎并不总是有效。我总是收到错误 $db not defined 或其他一些未定义的错误。
第二个密码是这样的。我曾经连接到 mongodb 而无需创建多个连接。这工作正常,没有问题。
class DbConnection{
static protected $_instance;
protected $db = null;
final protected function __construct() {
$m = new Mongo("mongodb://username:password@localhost:27017");
$this->db = $m->selectDB( "databasename" );
}
static public function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function getConnection() {
return $this->db;
}
final protected function __clone() { }
}
要在我使用的另一个类中使用此代码
$db=DbConnection::getInstance()->getConnection();
$collection=$db->users;
我不知道为什么第二个有效但第一个代码无效。如果我在 mysql 中同时使用两者都可以正常工作。这也可能是问题,而不是在第二个代码中我创建了到 mongodatabase 的连接并保持它打开并直接在另一个类中使用。
请简单描述为什么第二个代码工作正常而第一个代码没有工作。