抽離CodeIgniter的資料庫訪問類_PHP教程

來源:互聯網
上載者:User
好吧,因為組織需要,最近又開始轉戰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:
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:

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
zny2008@gmail.com
OK啦~~~ 這樣我們如果要在資料訪問前需要做許可權校正的話,只需要在MYDB函數中做判斷即可。
另外,不得不說ci模組拆分的確實不錯,instantiate_class是來自於它的system\codeigniter\Common.php。 log_message我給重寫了一下,因為對於每個調用者來說,希望寫log的方式是不一樣的。(比如我這次就直接列印在了螢幕上。。。。),最近正好 在看設計模式,這種方式也是符合模版方法模式的。

作者“wolf的個人空間”

http://www.bkjia.com/PHPjc/478617.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478617.htmlTechArticle好吧,因為組織需要,最近又開始轉戰php了,商務邏輯都還好說,主要是老大要求在資料訪問層上加上登入態驗證。 其實這種要求也是合理...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.