当 PHP 遇上 MongoDB
FROM:http://www.cstor.cn/textdetail_7995.html
之前笔者出了一篇文章是教大家在 Linux 下安装 MongoDB,并且透过 Mongo Client 操作资料库 (Console Interface),但实际应用上最常搭配 Web 或 WebService 进行实作。接下来我们要介绍如何在 PHP 中操作 MongoDB。这里一样介绍 CentOS 的安装方式,首先透过 EPEL 安装 PHP Mongo Driver,请执行以下命令安装:
sudo yum install php-pecl-mongo
启动 Mongo DB Server:
sudo service mongod start
写一支 PHP 透过 MongoClient 类别来存取资料库 (官方教学文件使用的 Mongo 类别已经废止),程式码如下:
// Configuration $dbhost = ‘localhost'; $dbname = ‘my_mongodb'; // Connect to mongo database $mongoClient = new \MongoClient(‘mongodb://’ . $dbhost); $db = $mongoClient->$dbname; // Get the users collection $cUsers = $db->users; // Insert object $user = array( ‘first_name’ => ‘SJ’, ‘last_name’ => ‘Mongo’, ‘roles’ => array(‘developer’,’bugmaker’) ); // Insert this new document into the users collection $cUsers->save($user); // Query $user = array( ‘first_name’ => ‘SJ’, ‘last_name’ => ‘Mongo’ ); $user = $cUsers->findOne($user); // output print_r($user);
执行结果如下:
Array ( [_id] => MongoId Object ( [$id] => 53de543d58b420881b998c8b ) [first_name] => SJ [last_name] => Mongo [roles] => Array ( [0] => developer [1] => bugmaker ) )
上述的动作会直接操作 my_mongodb 资料库,建立一个名为 users 的 Collection 并且新增一个物件,整个过程不需要事先建立资料库与 Schema,是不是很简单快速呢!?执行完成後我们也可以在 /var/lib/mongodb/ 目录中看见 my_mongodb.0~1 等档案,表示我们的资料已经建立。
可是过程我们发现一件事情,整个 MongoDB 连线动作竟然没有验证!没错,预设 MongoDB 启用确实是无敌状态,接下来我们介绍如何启用帐密连线验证。
开启你的 MongoDB 连线验证
第一步先透过 mongo 命令,在 admin 资料库中建立欲连线的帐号密码 = mongo
MongoDB 管理者需在 admin 资料库中建立使用者,因此我们执行以下 Query:
use admin;
db.addUser(‘sj’, ‘my-password’);
exit;
第二步修改 /etc/mongodb.conf 设定档,开启「auth = true」启用验证程序
sudo vim /etc/mongodb.conf
重新启用 MongoDB 服务
sudo service mongod restart
接着我们就可以透过 mongo 命令设定 my_mongodb 的连线使用者,如下:
use admin;
db.auth(‘sj’, ‘my-password’);
use my_mongodb;
db.addUser(‘sj’, ‘my-password’);
exit;
上述我们透过 db.auth 进行登入,由於已经启用认证,必须登入後才可以操作资料库。
接着我们将 PHP 修改为以下,加入 MongoDB 连线的帐号与密码:
// Configuration $dbhost = ‘localhost'; $dbname = ‘my_mongodb'; // Connect to mongo database $mongoClient = new \MongoClient( ‘mongodb://’ . $dbhost, array( ‘db’ => $dbname, ‘username’ => ‘sj’, ‘password’ => ‘my-password’ ) ); $db = $mongoClient->$dbname; // Get the users collection $cUsers = $db->users; // Query $user = array( ‘first_name’ => ‘SJ’, ‘last_name’ => ‘Mongo’ ); $user = $cUsers->findOne($user); // output print_r($user);
如此就可以透过帐密与 MongoDB 正确进行连线罗,介绍到此,下次再见。
当 PHP 遇上 MongoDB的更多相关文章
- MVC遇上bootstrap后的ajax表单模型验证
MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...
- 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)
邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...
- 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)
我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...
- 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)
邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...
- 初识genymotion安装遇上的VirtualBox问题
想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了g ...
- 线上mongodb数据库mLab使用总结
最近在CNode社区看到有人分享了免费的线上mongodb数据库(容量500M),今天去注册了一下,成功的将线下数据库替换掉了,现在就说一下它的使用和配置需要注意的地方: mLab是一款免费的在线mo ...
- SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案
SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...
- 当创业遇上O2O,新一批死亡名单,看完震惊了!
当创业遇上O2O,故事就开始了,总投入1.6亿.半年开7家便利店.会员猛增至10万……2015半年过去后,很多故事在后面变成了一场创业“事故”,是模式错误还是烧钱过度?这些项目的失败能给国内创业者带来 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)
当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...
随机推荐
- WIN10 安装Docker MySQL Ubuntu
1) 必须专业版, 要开启 Hyper-V 2)下载安装包: 链接:https://pan.baidu.com/s/1APqcq2glvwzsCHlwRnPXkA 密码:wpej 3)安装时不要勾 ...
- Git常用分支操作
新建分支 git branch branchname 切换到分支dev git checkout branchname 查看所有的分支信息 git branch -a 查看远程分支信息 git bra ...
- hi.baidu.com 百度流量统计
在字幕侠的官网访问之后,发现 <meta name="baidu-site-verification" content="3uvZd9Aact" /> ...
- 2-Color Dutch National Flag Problem
2-Color Dutch National Flag Problem 问题 a[0..n-1]中包含红元素或蓝元素;重新放置使得 红元素均在蓝元素之前. 循环不变式 每一次循环,a[0...k-1] ...
- java中TreeMap集合的常用方法
实现Map集合的方法这里就不在讲了 https://www.cnblogs.com/xiaostudy/p/9510763.html public Map.Entry<K,V> ceili ...
- 多线程之wait,notify,volatile,synchronized,sleep
最近在学习多线程,现在进行总结一下吧.首先要了解一下以下几个名词. (1)wait:当线程调用wait()方法时,当前该线程会进入阻塞状态,且释放锁,使用wait方法的时候,必须配合synchroni ...
- .NET、C#和ASP.NET三者之间的区别与联系
.NET.C#和ASP.NET三者之间的区别与联系 1..net(dot net) .net是一个平台,抽象的平台概念. 实现形式是库:①定义了基本的类型(通用类型系统CTS,common type ...
- spring4x,暂时停更
spring4x,暂时停更 鄙人愚笨,没有spring基础,直接上了spring4x,发现无法理解(另外spring4x实战课本演示不详,本人学识有限),现从spring3开始.
- Educational Codeforces Round 38
http://codeforces.com/contest/938 A:sb题 //#pragma comment(linker, "/stack:200000000") //#p ...
- mybatis 批量修改接口的几种实现方式
-----------------我也是有上线的--------------我也是有上线的------------我也是有上线的---------------我也是有上线的-------------- ...