最近要用到Yii框架,要求访问mongodb数据库,查询结果后在页面显示。本以为就和访问Mysql一样方便,没想到却有如此多的坑。害怕以后忘掉了,所以记录一下。
一开始没啥经验,直接在百度搜“Yii框架 mongodb”字样,结果搜出来了“Yii框架 使用Mongodb扩展—YiiMongoDbSuite”。就按照教程把压缩包下载下来,配置配好了,整个步骤如下:
(1)下载好插件后解压到protected > extensions目录 我将文件夹命名为YiiMongoDbSuite,然后找到配置文件protected > config > main.php 在"半自动加载模型组件配置"的地方加载我们需要的YiiMongoDbSuite插件代码如下:
'import'=>array(
'application.models.*',
'application.components.*',
'ext.YiiMongoDbSuite.*',
),
然后配置下mongo数据库链接代码如下:
'mongodb' => array(
'class' => 'EMongoDB', //主文件
'connectionString' => 'mongodb://127.0.0.1:27017', //服务器地址
'dbName' => 'test',//数据库名称
'fsyncFlag' => true, //mongodb的确保所有写入到数据库的安全存储到磁盘
'safeFlag' => true, //mongodb的等待检索的所有写操作的状态,并检查
'useCursor' => false,
),
数据库连接好后我们来操作数据库,看看模型(model)代码:
class User extends EMongoDocument {
public $z;
public static function model($className = __CLASS__){
return parent::model($className);
}
public function getCollectionName()
{
return 'foo';
}
public function addInfo() {
$this->z='1234';
$this->save();
}
}
然后在controller里面配置代码:
public function actionIndex(){
$model = new User();
$model->addInfo();
}
好了,信心满满的想刷新一下网页看看效果,queue得到一个信息,类似于class(Mongo.php) not find 这种错误。
看来是哪里配置出问题了,把错误信息google一下,看了好久,貌似有人说驱动?第一次接触php连接mongodb,有点不懂。有说需要php_mongo.dll的,有说需要php_mongodb.dll的,简直看花了眼。最后搜到菜鸟上面教程,说:
到现在开始明白了,php中连接mongodb和使用什么框架没啥关系,是PHP驱动。于是去下载驱动:
有好多,不知道下哪个,而且为什么有的名字叫mongo,有的名字叫php_mongo。于是我随便下载了几个安装包,然后按照教程,把dll文件放到xampp\php\ext文件夹下面,在php.ini中写好extension=php_mongo.dll,重启xampp的apache服务,刷新页面,依然报错。
于是继续搜索,好多文章只是写了如何如何操作(上面步骤),觉得人家操作都好容易啊,为啥我的就不行了。直到后面看见了另外一篇文章:《PHP-xampp-mongodb扩展》
,上面写道:
就在这时,我看到一篇文章在查看php_version的时候是在命令行打 php -version的方法,说正确安装mongodb的话会显示mongodb的版本,我试了一下,竟然提示出错了!!!
Php Startup : Unable to load dynamic library 'D:\xampp\php\ext\php_mongo.dll ' - 该文件不是有效的win32程序
继续考入文件夹,修改php.ini文件,在controller的actionindex()下面输入phpinfo()后,出现了mongodb的栏位,代表装成功了。