【捷哥浅谈PHP】第十四弹—NoSQL数据库之PHP连接MongoDB

2012 年 9 月 6 日8,1740

大家好,我又来跟大家啰嗦了,今天外面的天气由于阴天好像不是很热,相比前几天的持续高温,今天已经凉爽了很多,不过出门要记得带伞哦!

好了,今天我们就来完成唐僧师徒的取经大业!

上一回我们讲了MongoDB的游标,索引和聚合,本回我们接着来搞定我们的PHP接MongoDB数据库!

今天我们来搞定MongoDB的4个核心类:

1,针对mongoDB接的操作:Mongo
2,针对mongoDB中数据库的操作:MongoDB
3,针对mongoDB中collection的操作:MongoCollection
4,针对查询结果集的操作:MongoCursor

大家还记得我们用PHP使用PDO,使用memcache,是不是都需要在环境下给php打模块,扩展包!

MongoDB同样需要PHP来打模块,编译扩展包:

好,我们来看下编译的步骤:

1)首先下载最新的php mongodb扩展源码,源码可以在http://pecl.php.net/package/mongo下载.
2)然后解压出来
tar zxvf mongo-1.2.6.tgz

\

3)进入文件夹后,首先运行phpize来准备编译扩展的环境
/usr/local/php/bin/phpize

\

4)运行后,我们运行./configure脚本来进行配置
./configure --with-php-config=/usr/local/php/bin/php-config

\

--with-php-config这个参数是告诉配置脚本php-config这个程序的路径

5)这时用make来编译扩展

\

make && make install
正确编译执行结果如下(下图是编译输出的最后几行)

6)完成后,请编辑你php.ini文件增加一行
extension=mongo.so
一般默认的编译php的ini文件/usr/local/php/etc/php.ini

\

重启Apache 打开phpinfo
看到mongo模块,证明MongoDB的php扩展安装成功

好,我们来看这四个核心类:
首先,来看第一个类:Mongo(连接)类
先看它的构造方法:

public Mongo::__construct ([ string $server = "mongodb://localhost:27017" [, array $options = array("connect" => TRUE) ]] )

通过它的构造方法我们可以看出,实例化的时候可以填写用户名密码,还有主机地址,第二个参数为选项,可以指明主从复制等一些选项,这里不过多去讲了!

好,我们来看以下代码:

通过以上事例,我们可以看到,在实例化Mongo类的时候,我们可以指定连接的用户名,密码,地址,端口,要选择的数据库;

还可以什么都不写,不写的情况下,默认进入的是test数据库,如果我们要选择其他数据库,我们这里可以使用以下方法进行选择:

public MongoDB Mongo::selectDB ( string $name )

也就是:

MongoDB选择数据库还有一种很简单的方法,那就是直接使用连接对象调用数据库名称即可:

我们还可以使用listDBs()方法查看数据库列表:

public array Mongo::listDBs ( void )

这里返回的是一个数组,返回所有数据库的名称等信息!

除此之外还可以使用dropDB方法来删除数据库:

public array Mongo::dropDB ( mixed $db )

最后,Mongo类还有一个很有用的方法,关闭数据库连接的方法:

public bool Mongo::close ( void )

好,我们再来看第二个类------MongoDB(数据库)类

给数据库用户授权的方法:

public array authenticate ( string $username , string $password )

执行数据库命令的方法:

public array command ( array $command [, array $options = array() ] )

构造方法

public__construct ( Mongo $conn , string $name )

创建集合的方法:

public MongoCollection createCollection ( string $name [, bool $capped = FALSE [, int $size = 0 [, int $max = 0 ]]] )

删除数据库的方法:

public array drop ( void )

删除集合的方法:

public array dropCollection ( mixed $coll )

返回上一条Mongo错误的方法:

public array lastError ( void )

选择集合的方法:

public MongoCollection selectCollection ( string $name )

第三个类------MongoCollection(集合)类:

构造方法:

public__construct ( MongoDB $db , string $name )

获取文档总数

public int count ([ array $query = array() [, int $limit = 0 [, int $skip = 0 ]]] )

删除集合内的索引

public array deleteIndex ( string|array $keys )

删除集合内的所有索引

public array deleteIndexes ( void )

删除当前集合

public array drop ( void )

创建索引

public bool ensureIndex ( string|array $key|keys [, array $options = array() ] )

查询集合内的文档

public MongoCursor find ([ array $query = array() [, array $fields = array() ]] )

查询集合内满足条件的一条文档

public array findOne ([ array $query = array() [, array $fields = array() ]] )

新增一条文档

public bool|array insert ( array $a [, array $options = array() ] )

移除文档

public bool|array remove ([ array $criteria = array() [, array $options = array() ]] )

新增或更新文档

public mixed save ( array $a [, array $options = array() ] )

更新文档

public bool|array update ( array $criteria , array $new_object [, array $options = array() ] )

第四个类------MongoCursor(游标)类:

获取下一个游标:

public array getNext ( void )

判断是否有下一个游标:

public bool hasNext ( void )

显示几条文档:

public MongoCursor limit ( int $num )

将游标向后移一位:

public void next ( void )

将游标跳过N个文档:

public MongoCursor skip ( int $num )

将文档排序:

public MongoCursor sort ( array $fields )

好,通过这四个类,我们就可以写一个简单的新闻发布系统:

index.php 首页列表

header.php 页头

Mongoconn.php 连接MongoDB数据库文件

add.php 添加页面

del.php 删除页面

mod.php修改页面

show.php新闻详情页

footer.php 页脚

注意:在MongoDB当中传递_id的时候,需要使用new MongoId($_GET['id']),把_id转为Mongo对象的ID,才能找到数据库中的文档!
分页的原理如果还是不明白,可以查看【捷哥浅谈PHP】第五弹---分页之九阳神功
至此,我们的MongoDB就全部学完,如学习过程当中有什么不明白的,可以跟帖留言,或者跟我QQ交流:86267659,或者进我的微博:http://weibo.com/u/1372373023

MongoDB系列文章:
【捷哥浅谈PHP】第九弹---NoSQL数据库之MongoDB的介绍及安装
【捷哥浅谈PHP】第十弹---NoSQL数据库之MongoDB的CURD操作(一)
【捷哥浅谈PHP】第十一弹---NoSQL数据库之MongoDB的CURD操作(二)
【捷哥浅谈PHP】第十二弹---NoSQL数据库之MongoDB的CURD操作(三)
【捷哥浅谈PHP】第十三弹---NoSQL数据库之MongoDB的CURD操作(四)

更多精彩,请猛击:
【捷哥浅谈PHP】第一弹---php位运算符”|”和逻辑运算符”||”遇到的问题
【捷哥浅谈PHP】第二弹---经典算法的运用(冒泡排序和快速排序)
【捷哥浅谈PHP】第三弹---使用二分查找法查找数组中的元素位置
【捷哥浅谈PHP】第四弹---递归函数
【捷哥浅谈PHP】第五弹 --- 分页之九阳神功
【捷哥浅谈PHP】第六弹 ---- 使用for循环输出九九乘法表
【捷哥浅谈PHP】第七弹 ---- 基于角色的访问控制RBAC
【捷哥浅谈PHP】第八弹---使用PHP的date函数输出日历

0 0