我有两个代码用于连接到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未定义或其他一些未定义的错误。
第二个代码就是这个。我曾经连接到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的连接并保持打开并直接在另一个类中使用。
请描述为什么第二个代码工作正常并且首先没有效果。
答案 0 :(得分:2)
在第一段代码中,当$db
变量为null
并且您创建新连接时,您的getMongoCon
函数不会返回任何内容 ,因此当您尝试在示例中使用它时,$db=DbConnection::getMongoCon();
会将null
设置为$db
变量。
要使其正常工作,您应该执行以下操作:
...
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;
}
return self::$db;
}
...