当 PHP 遇上 MongoDB

时间:2023-03-08 21:56:38

  FROM:http://www.cstor.cn/textdetail_7995.html

当 PHP 遇上 MongoDB

  之前笔者出了一篇文章是教大家在 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 正确进行连线罗,介绍到此,下次再见。