程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 抽離CodeIgniter的數據庫訪問類

抽離CodeIgniter的數據庫訪問類

編輯:關於PHP編程

好吧,因為組織需要,最近又開始轉戰php了,業務邏輯都還好說,主要是老大要求在數據訪問層上加上登錄態驗證。
其實這種要求也是合理的,互聯網服務要求上層保護下層,但下層不能完全相信上層。但是問題也就來了,有如下兩種方案:
1.寫一個mysql proxy server,用來將調用方發來的請求拼裝,然後返回給調用側。這樣做的主要難度在於:
a)SQL語句的拼裝及序列化
b)數據集序列化,雖然有不少這方面的產品,但是終究還是太過復雜,而且沒有時間折騰
果斷放棄。
2.封裝一層mysql的api,調用方直接在本地調用即可。這樣的話,只需要考慮SQL語句的拼裝即可。現在就有很多選擇啦,
a)使用類似django裡面Model的模型類
b)使用ci中的Active Record
雖然說Model的方式,對數據層的屏蔽較好,但是小組成員普遍認為這種方式過重,輕量的一點的話,最終還是選擇了CodeIgniter中的AR。
OK,那麼現在,考驗ci模塊拆分的好不好的時候到啦!
具體中間的種種辛苦就不說啦,直說我最終的實現把,拷貝system\database到一個單獨的目錄,x:/php/ 。
創建一個文件myconfig.php:
<?php
define('BASEPATH', dirname(__FILE__).'/');
define('EXT', '.php');
require_once(BASEPATH . 'database/DB' . EXT);
 
function &instantiate_class(&$class_object)
{
    return $class_object;
}
 
function log_message($level = 'error', $message, $php_error = FALSE)
{
    echo($message);
}
function MYDB()
{
    $params = array(
        'dbdriver'  => 'mysql',
        'hostname'  => 'localhost',
        'username'  => 'root',
        'password'  => '',
        'database'  => 'dante',
        'pconnect'  => TRUE,
        'db_debug'  => FALSE,
        'cache_on'  => FALSE,
        'char_set'  => 'utf-8',
        'dbcollat'  => 'utf8_general_ci',
    );
    $db = DB($params,TRUE);    
    return $db;
}
?>
創建一個測試文件test.php:
 
<?php
require_once('myconfig.php');
$db = MYDB();
$db->select('ID,user_login,user_email');
$query = $db->get('wp_users');
echo "\n";
foreach ($query->result() as $row)
{
    print $row->ID . "\n";
    print $row->user_login . "\n";
    print $row->user_email . "\n";
}
?>
輸入結果如下:

Database Driver Class Initialized
1
admin
[email protected]
OK啦~~~ 這樣我們如果要在數據訪問前需要做權限校驗的話,只需要在MYDB函數中做判斷即可。
另外,不得不說ci模塊拆分的確實不錯,instantiate_class是來自於它的system\codeigniter\Common.php。 log_message我給重寫了一下,因為對於每個調用者來說,希望寫log的方式是不一樣的。(比如我這次就直接打印在了屏幕上。。。。),最近正好 在看設計模式,這種方式也是符合模版方法模式的。

作者“wolf的個人空間”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved