当 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(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...
随机推荐
- some words
For we meet in an hour of change and challenge, in a dacade of hope and fear, in an a ...
- centos7下安装ngnix1.8.1
参考 http://www.linuxidc.com/Linux/2016-09/134907.htm 安装依赖 openssl zlib pcre gcc 下载安装包 [root@localhost ...
- C# 打开电子邮件软件
使用客户端打开指定的URL 使用Process.Start方法可以在浏览器打开指定的URL.代码如下所示. [C#] //使用客户端打开“http://www.baidu.com” System.Di ...
- mac的一些配置
1,基础知识 /etc/bashrc :是针对系统所有用户的全局变量,只有root用户才能修改这两个文件,对一般用户来说是他们是只读的.一般用户要想修改它们,可以在命令前加sudo,意思是以Root身 ...
- CNI:容器网络接口
CNI 简介 不管是 docker 还是 kubernetes,在网络方面目前都没有一个完美的.终极的.普适性的解决方案,不同的用户和企业因为各种原因会使用不同的网络方案.目前存在网络方案 flann ...
- spring3: 延迟初始化Bean
3.3.1 延迟初始化Bean 延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean. 配置方式很简单只需在<bean>标签上指定 “lazy- ...
- P3374 【模板】树状数组 1
树状数组模板题,用cdq分治做 cdq分治: 分:把l到r分成两个区间操作 治:对每个分出来的区间进行操作 但是cdq分治和一般分治不同的是,一般的分治左右两个区间互不干扰,但是cdq分治处理的是区间 ...
- 列出远程git的全部分支
列出全部分支 git ls-remote --heads your.git | awk 'sub(/refs\/heads\//,""){print $2}' 其中awk中sub替 ...
- quartz简单应用
pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...
- 控制语句1:真假与if 语句
一.真假与运算符 1.1 真假的划分.查看 任何数据都可以分为两类:True 与 False False : 0,None,空的数据结构例如:[] ,{},str1 = '' True :除了上面情 ...