實作:當 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 正確進行連線囉,介紹到此,下次再見。