抽離CodeIgniter的資料庫訪問類 可以獨立使用

來源:互聯網
上載者:User

標籤:使用   os   io   檔案   資料   for   ar   問題   

好吧,因為組織需要,最近又開始轉戰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的方式是不一樣的。(比如我這次就直接列印在了螢幕上。。。。),最近正好 在看設計模式,這種方式也是符合模版方法模式的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.