设为首页 收藏本站
查看: 885|回复: 0

[经验分享] MongoDB与PHP的简单应用

[复制链接]

尚未签到

发表于 2015-7-7 12:15:23 | 显示全部楼层 |阅读模式
  1. MongoDB的PHP驱动
  MongoDB在PHP驱动程序是一个PHP扩展,在绝大部分平台下都很容易安装。PHP5.1及以上版本的系统就可以了。
  首先查看phpinfo()的输出,确定运行的PHP版本和VC版本。这里VC版本可以简单地理解为PHP的编译机制,如果用的是Apache,则需要VC6,否则需要VC9,例如IIS。有些Zend用的VC8。还要注意是否是线程安全的(Thread Safety),对应到PHP的驱动包名中缩写为“ts”。同时要明确extension_dir的值,所有的扩展组件都放在这里。
  2. 在Windows下安装PHP的MongoDB扩展
  到官网下载和PHP版本、VC版本和线程安全相匹配的包,解压后,将php_mongo.dll移动到extension_dir目录。
  如果启动了应用服务器(Apache、WAMPP等),需要重启,下次启动PHP时会自动加载Mongo扩展。
  3. PHP驱动程序的简单示例
  Mongo类就是一个到数据库的连接。默认情况下,构造器尝试连接本地默认端口处运行的数据库服务器。MongoDB中的文档用PHP中的关联数组表示,{“foo” : “bar”}对应PHP中的array(“foo” => “bar”)。MongoDB中的数组对应表示为PHP中的数组,[“foo”, “bar”, “baz”]对于PHP中的array(“foo”, “bar”, “baz”)。对于null、布尔型、数字型、字符串和数组,PHP驱动使用了PHP的本机类型。对于其他类型,可参看手册。
  示例1:
  获取数据库test的users集合,不用担心users集合是否存在,若不存在该集合,程序会在数据库中自动创建。如下:



1
  当然还可以继续访问子集合,例如获取users.addresses集合:



1 $collection = $connection->users->addresses;
  注意:这里创建MongoDB的连接时,new Mongo()中没有传任何参数,那么默认连接到localhost:27017的MongoDB服务器上。如果要创建到某个主机的某个端口的连接,可以编写如下代码:



1 $connection = new Mongo(‘example.com’);    //连接到example.com:27017
2 $connection = new Mongo(‘example.com:65432‘);          //连接到example.com:65432
  有人会有疑问,如果MongoDB是以安全认证的机制运行的,那么怎么连接服务器呢?可以通过传入用户名和密码获取连接:



1 $connection = new Mongo(‘cx:123456@example:65432/test’);
  有人又会注意到多出了“test”,这是所传入的用户名和密码对应的数据库。如果不指明用所传的用户名和密码去哪个数据库去验证,那么默认为admin数据库。
  关于Mongo类构造函数的参数还有许多,可以参考PHP开发手册。
  示例2:
  向users集合中插入一个文档:



1 $user = array(“username” => “cx”, “age” => 23);
2
3 $collection->insert($user);
  注意:MongoDB数据库只接受utf-8编码的数据,否则插入数据时会报错。假如我们插入的文档中的键值包含中文字符,在插入之前,需要将中文字符转换成utf-8编码。还有一种解决办法,就是使用MongoBinData类。用非utf-8编码的字符串来实例化MongoBinData类,然后将这个类当作值赋给某个键。例如:



1 $profile = array(‘username’ => ‘foobity’,
2
3    ‘pic’ => new MongoBinData(‘百老汇’);
4
5 );
  示例3:
  输出users集合中第一个文档的id号:



1 $user = $collection->findOne();
2
3 echo $user[‘_id’];
  示例4:
  输出所有用户的名字:



1 $cursor = $collection->find();
2
3 foreach ($cursor as $value)
4
5 {
6
7          echo $value[‘username’] . ‘’;
8
9 }
  或者



1 While ($cursor->hasNext())
2
3 {
4
5          $doc = $cursor->getNext();
6
7          echo $doc[‘username’] . ‘’;
8
9 }
  如果想对查询的结果按用户名进行升序排序,如下:



1 $cursor->sort(array(‘username’ => 1));
  注意:由于MongoDB文档的结构很灵活,所以这种情况要确保每个文档都包含这个“username”键。
  示例5:
  修改users集合中用户名为“lucy”的用户的年龄为20:



1 $collection->update(array(‘username’ => ‘lucy’), array(‘$set’ : array(‘age’ : 20)));
  注意:“$set”修改器,MonoDB默认字符是“$”,但PHP中“$”表示变量前缀,所以可以通过用单引号使用“$set”修改器,或者在双引号中转义,如”\$set”,再或者在php.ini文件中设置mongo.cmd_char = “…”,用任何你觉得可以代替$的字符都可以。
  这里还可以用save()方法来更新数据。save()方法传入的参数是要修改的文档,如果该文档在集合中已经存在(判断该文档是否含有“_id”键),那么执行更新操作,否则执行插入操作。
  示例6:
  删除users集合中的用户名为“lucy”的文档:



1 $collection->remove(array(‘username’ => ‘lucy’));
  示例7:
  给users集合中建立索引:



1 $collection->ensureIndex(‘username’ => 1);
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84111-1-1.html 上篇帖子: MongoDB删除数据 下篇帖子: mongoDB研究笔记:复制集故障转移机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表