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 類別已經廢止),程式碼如下:
<?php // 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 連線的帳號與密碼:
<?php // 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 Driver Document
- Steps to Install MongoDB 2.6 on CentOS/RHEL & Fedora
- Authentication - MongoDB Manual