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的更多相关文章

  1. MVC遇上bootstrap后的ajax表单模型验证

    MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...

  2. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

  3. 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)

        我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...

  4. 敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)

    邀请函: 尊敬的阁下: 我们将在深圳为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战 ...

  5. 初识genymotion安装遇上的VirtualBox问题

    想必做过Android开发的都讨厌那慢如蜗牛的 eclipse原生Android模拟器吧! 光是启动这个模拟器都得花上两三分钟,慢慢的用起来手机来调试,但那毕竟不是长久之计,也确实不方便,后来知道了g ...

  6. 线上mongodb数据库mLab使用总结

    最近在CNode社区看到有人分享了免费的线上mongodb数据库(容量500M),今天去注册了一下,成功的将线下数据库替换掉了,现在就说一下它的使用和配置需要注意的地方: mLab是一款免费的在线mo ...

  7. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  8. 当创业遇上O2O,新一批死亡名单,看完震惊了!

    当创业遇上O2O,故事就开始了,总投入1.6亿.半年开7家便利店.会员猛增至10万……2015半年过去后,很多故事在后面变成了一场创业“事故”,是模式错误还是烧钱过度?这些项目的失败能给国内创业者带来 ...

  9. LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)

    当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...

随机推荐

  1. Action Results in Web API 2

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action- ...

  2. 二路归并排序,利用递归,时间复杂度o(nlgn)

    public class MergeSort { public void mergeSort(int[]data, int left, int right) { if(left >= right ...

  3. scjp考试准备 - 8 - final关键字

    题目,如下代码的执行结果: import java.util.ArrayList; class Pizza{ ArrayList toppings; public final void addTopp ...

  4. JNIjw01

    1.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_JNIjw01.h" JNIEXPORT void JNICALL ...

  5. JDBC插入性能优化对比

    今天对Insert进行了性能测试,结果反差很大,平时都是单条插入,虽然性能要求没有那么高,但是突然在项目中,人家给定时间内完成,这就尴尬了. 优化数据库,优化服务器,优化代码,反正通过各种优化提高数据 ...

  6. Android仿IOS底部弹出选择菜单ActionSheet

    使用Dialog的实现方式,解决原ActionSheet使用Fragment实现而出现的部分手机取消按钮被遮盖的问题 java部分代码: import android.app.Dialog; impo ...

  7. 关于Jupyter Notebook默认起始目录设置无效的解决方法

    一.问题描述 今天折腾jupyter的时候,突然觉得起始目录是用户根目录很麻烦,想着把他改成自己的某个文件,按照网上方法折腾半天也还是无效.东点点西看看才发现端倪. [win10以下好像没这个问题,修 ...

  8. 在mybatis中使用存储过程报错java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: PLS-00905: 对象 USER1.HELLO_TEST 无效 ORA-06550: 第 1 行, 第 7 列:

    hello_test是我的存储过程的名字,在mapper.xml文件中是这么写的 <select id="getPageByProcedure" statementType= ...

  9. selenium学习笔记(selenium下载安装)

    博主自己捣鼓的接口框架先到这里 等工作上正式开始使用再后续完善需求 还是继续学习python.学编程就直接动手写 就想看看python+selenium的组合 什么都不多说.先下载安装 博主这里已经安 ...

  10. C#外部类、内部类(嵌套类)之间的成员访问特点

    最近程序中需要用到多线程工作下的单例模式.而其多种实现方法中,利用内部类实现懒汉模式是一种值得推荐的方式.顺便也就对内部类和外部类之间的关系做了一下研究,总结如下(理解不困难,不粘贴代码了,有需要的留 ...