fbpx

MongoDB 教學 - 當 PHP 遇上 MongoDB

PHP + MongoDB - 手牽手心連心mongo-db-alternate-logo

前一篇文章我們介紹過如何在 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 正確進行連線囉,介紹到此,下次再見!

參考資料

MongoDB 系列文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料