好贷网好贷款

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

发布时间:2016-12-3 14:42:40 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"【捷哥浅谈PHP】第十四弹---NoSQL数据库之PHP连接MongoDB",主要涉及到【捷哥浅谈PHP】第十四弹---NoSQL数据库之PHP连接MongoDB方面的内容,对于【捷哥浅谈PHP】第十四弹---NoSQL数据库之PHP连接MongoDB感兴趣的同学可以参考一下。

大家好,我又来跟大家啰嗦了,今天外面的天气由于阴天好像不是很热,相比前几天的持续高温,今天已经凉爽了很多,不过出门要记得带伞哦!好了,今天我们就来完成唐僧师徒的取经大业!上一回我们讲了MongoDB的游标,索引和聚合,本回我们接着来搞定我们的PHP连接MongoDB数据库!今天我们来搞定MongoDB的4个核心类:1,针对mongoDB连接的操作:Mongo2,针对mongoDB中数据库的操作:MongoDB3,针对mongoDB中collection的操作:MongoCollection4,针对查询结果集的操作:MongoCursor大家还记得我们用PHP使用PDO,使用memcache,是不是都需要在环境下给php打模块,扩展包!MongoDB同样需要PHP来打模块,编译扩展包:好,我们来看下编译的步骤:1)首先下载最新的php mongodb扩展源码,源码可以在http://pecl.php.net/package/mongo下载.2)然后解压出来tar zxvf mongo-1.2.6.tgz3)进入文件夹后,首先运行phpize来准备编译扩展的环境/usr/local/php/bin/phpize4)运行后,我们运行./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) ]] )通过它的构造方法我们可以看出,实例化的时候可以填写用户名密码,还有主机地址,第二个参数为选项,可以指明主从复制等一些选项,这里不过多去讲了!好,我们来看以下代码: 复制代码 <?php //连接localhost:27017 $conn = new Mongo(); //连接远程主机默认端口 $conn = new Mongo('test.com'); //连接远程主机22011端口 $conn = new Mongo('test.com:22011'); //MongoDB有用户名密码 $conn = new Mongo("mongodb://${username}:[email protected]"); //MongoDB有用户名密码并指定数据库blog $conn = new Mongo("mongodb://${username}:[email protected]/blog"); //多个服务器 $conn = new Mongo("mongodb://localhost:27017,localhost:27018"); ?>通过以上事例,我们可以看到,在实例化Mongo类的时候,我们可以指定连接的用户名,密码,地址,端口,要选择的数据库;还可以什么都不写,不写的情况下,默认进入的是test数据库,如果我们要选择其他数据库,我们这里可以使用以下方法进行选择:public MongoDB Mongo::selectDB ( string $name )也就是: 复制代码 <?php //选择数据库 $db = $conn->selectDB('dahuaxiyou'); ?>MongoDB选择数据库还有一种很简单的方法,那就是直接使用连接对象调用数据库名称即可: 复制代码 <?php //通过数据库名称直接选择数据库 $db = $conn->dahuaxiyou; ?>我们还可以使用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 首页列表 复制代码 <?php include 'header.php'; if(!empty($_GET['info'])){ echo "<script>alert('".$_GET['info']."')</script>"; } //$result = $collection->find(array(),array("title"=>1,"ptime"=>1))->sort(array("ptime"=>-1)); //var_dump($result); ?> <div id='content'> <?php //定义页大小 $page_size = 10; //计算文档总数 $count = $collection->count(); //当前页码 $page_num = empty($_GET['page'])?'1':$_GET['page']; //查询出当前页 $doc = $collection->find(array(),array("title"=>1,"ptime"=>1))->limit($page_size)->skip(($page_num-1)*$page_size)->sort(array("ptime"=>-1)); //总页数 $page_count = ceil($count/$page_size); //遍历游标,输出结果集 while($doc->hasNext()){ $res = $doc->getNext(); //var_dump($res); echo '<div class="doc" onclick="show(\''.$res['_id'].'\')">※'; echo $res['title']; echo '<span>发表时间:'.date('Y-m-d H:i:s',$res['ptime']->sec).''; } ?> <script> function show(id){ window.location.href='show.php?id='+id; } </script> <div class="page"> <!--分页的链接--> <a href='index.php?page=1'>第一页 <a href='index.php?page=<?php echo (($page_num-1)<=1)?1:($page_num-1);?>'>上一页 <a href='index.php?page=<?php echo (($page_num+1)>=$page_count)?$page_count:($page_num+1);?>'>下一页& lt;/a> <a href='index.php?page=<?php echo $page_count;?>'>最后一页 共<?php echo $page_count?>页 总计<?php echo $count?>条新闻 当前第<?php echo $page_num?>页 <?php include 'footer.php'; ?>header.php 页头 复制代码 <?php include 'Mongoconn.php';?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MongoDB微型新闻发布系统</title> <link rel="stylesheet" type="text/css" href="ueditor/themes/default/ueditor.css"/> <meta http-equiv='Content-Type' content='text/html;charset=utf-8'> <style> body{ font-family:微软雅黑; } #main{ margin:0 auto; width:960px; } #header{ height:100px; line-height:100px; border:1px solid #999; text-align:center; font-size:30px; } #content{ margin-top:10px; border:1px solid #999; padding-top:20px; } #content .doc{ height:45px; line-height:45px; border-bottom:1px dashed #999; width:90%; margin:0px auto; font-size:13px; padding:0 15px; cursor:pointer; } #content .page{ margin:10px 0; text-align:center; height:50px; line-height:50px; } #footer{ height:60px; line-height:60px; text-align:center; margin-top:10px; border:1px solid #999; } .doc span{ float:right; } #menu{ height:50px; border:1px solid #999; margin-top:10px; } #menu ul{ float:right; } #menu li{ float:left; list-style:none; margin-right:20px; } #post{ height:500px; border:1px solid #999; margin:10px auto; padding:30px; } #title{ margin-bottom:10px; } #sub{ margin-top:10px; } #sub input{ width:60px; height:25px; margin-right:10px; } #show{ border:1px solid #999; padding:15px; margin-top:10px; } #show_title{ margin:0 auto; text-align:center; font-weight:700; font-size:20px; color:green; } #show_content{ padding: 5px 20px; font-size:14px; } </style> <script src="jquery.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8" src="./ueditor/editor_config.js"></script> <script type="text/javascript" charset="utf-8" src="./ueditor/editor_all.js"></script> <script type="text/javascript"> $(function(){ $('.doc').hover(function(){ $(this).css("background",'#ddd'); },function(){ $(this).css("background","white"); }); }); </script> </head> <body> <div id='main'> <div id='header'>基于MongoDB的新闻发布系统 <div id='menu'> <ul> <a href='index.php'>查看新闻 <a href='add.php'>添加新闻 </ul> Mongoconn.php 连接MongoDB数据库文件 复制代码 <?php header('Content-Type:text/html;charset=utf-8'); try{ $conn = new Mongo("mongodb://news:[email protected]/news"); }catch(MongoException $e){ exit("数据库连接错误!".$e->getMessage()); } $db = $conn->news; $collection = $db->news; ?>add.php 添加页面 复制代码 <?php include 'header.php'; $_POST['ptime']=new MongoDate(); //var_dump($_POST); if(!empty($_POST['title'])){ if($collection->insert($_POST)){ header("location:index.php?id=".$_GET['id']."&info=发表成功!"); } } ?> <div id='post'> <form action='' method='post'> <div id='title'> <label name='title'>标题:</lable><input type='text' name='title' style='width:700px' /> <div id='con'> <textarea name='content' id='news_content'></textarea> <script type="text/javascript"> var editor_a = new baidu.editor.ui.Editor(); //渲染编辑器 //function render(){ editor_a.render('news_content'); //} </script> <div id='sub'> <input type='submit' value='提交' /> <input type='reset' value='重填' /> </form> <?php include 'footer.php';?>del.php 删除页面 复制代码 <?php include 'mongoconn.php'; if($_GET['id']){ if($collection->remove(array('_id'=>new MongoID($_GET['id'])))){ header('location:index.php?info=删除成功!'); }else{ header('location:index.php?info=删除失败!'); } } ?>mod.php修改页面 <?php include 'header.php'; if(!empty($_POST['title'])){ if(!empty($_GET['id'])){ if($collection->update(array("_id"=>new MongoID($_GET['id'])),array('$set'=>$_POST))){ header("location:show.php?id=".$_GET['id']."&info=修改成功!"); } } } $result = $collection->findOne(array("_id"=>new MongoID($_GET['id'])),array("title"=>1,"content"=>1)); ?> <div id='post'> <form action='' method='post'> <div id='title'> <label name='title'>标题:</lable><input type='text' name='title' style='width:92%;' value='<?php echo $result['title']?>' /> <div id='con'> <textarea name='content' id='news_content'><?php echo $result['content']?></textarea> <script type="text/javascript"> var editor_a = new baidu.editor.ui.Editor(); //渲染编辑器 //function render(){ editor_a.render('news_content'); //} </script> <div id='sub'> <input type='submit' value='提交' /> <input type='reset' value='重填' /> </form> <?php include 'footer.php';?>show.php新闻详情页 复制代码 <?php include 'header.php'; //var_dump($_GET); if(!empty($_GET['info'])){ echo "<script>alert('".$_GET['info']."')</script>"; } if($_GET['id']){ //$collection->remove(array('_id'=>new MongoID($_GET['id']))); $result = $collection->findOne(array("_id"=>new MongoID($_GET['id']))); //var_dump($result); } ?> <div id='show'> <div id='show_title'> <?php echo $result['title']?> <div style='height:10px;border-top:1px dashed #999;margin:15px 0;text-align:right;font-size:12px;line-height:30px'> 发表于:<?php echo date("Y-m-d H:i:s",$result['ptime']->sec) ?> <div id='show_content'> <?php echo $result['content']?> <div style='font-size:13px;text-align:right'><span><a href='mod.php?id=<?php echo $result['_id']?>'>编辑 | <span><a href='del.php?id=<?php echo $result['_id']?>'>删除 <?php include 'footer.php'?>footer.php 页脚 复制代码 <div id='footer'>版权归LAMP兄弟连所有 </body> </html>注意:在MongoDB当中传递_id的时候,需要使用new MongoId($_GET['id']),把_id转为Mongo对象的ID,才能找到数据库中的文档!分页的原理如果还是不明白,可以查看【捷哥浅谈PHP】第五弹---分页之九阳神功至此,我们的MongoDB就全部学完,如学习过程当中有什么不明白的,可以跟帖留言,或者跟我QQ交流:86267659,或者进我的微博:http://weibo.com/u/1372373023MongoDB系列文章:【捷哥浅谈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函数输出日历原文地址:http://bbs.lampbrother.net/read-htm-tid-120215.html 管理员在2009年8月13日编辑了该文章文章。 --> --> 阅读(181) | 评论(0) | 转发(0) | 0 上一篇:项目感受 下一篇:循环 相关热门文章 中国的ADP汽车市场 《数字技术与应用》征稿**投稿... 上海律师事务所 关于分库分表(Mysql篇) 数据库性能监控工具ORATOP... IP Sec VPN与NAT破镜重圆 网站导航 GoAgent图文设置教程 UT2.0正式版下载 tomcat6.0配置(含配置视频下载... 大家都是用什么来管理hadoop集... 网站被人挂了吗,添加了些程序... Nginx如何保证不走宕机的那个... 大家谈谈MYSQL客户端和服务器... 以下代码运行后为何会输出5?... 热门推荐 --> 给主人留下些什么吧!~~ 评论热议

上一篇:项目感受
下一篇:论&quot;新兵入伍&quot;

相关文章

相关评论