zoukankan      html  css  js  c++  java
  • 抽离CodeIgniter的数据库访问类 可以独立使用

    好吧,因为组织需要,最近又开始转战php了,业务逻辑都还好说,主要是老大要求在数据访问层上加上登录态验证。
    其实这种要求也是合理的,互联网服务要求上层保护下层,但下层不能完全相信上层。但是问题也就来了,有如下两种方案:
    1.写一个mysql proxy server,用来将调用方发来的请求拼装,然后返回给调用侧。这样做的主要难度在于:
    a)SQL语句的拼装及序列化
    b)数据集序列化,虽然有不少这方面的产品,但是终究还是太过复杂,而且没有时间折腾
    果断放弃。
    2.封装一层mysql的api,调用方直接在本地调用即可。这样的话,只需要考虑SQL语句的拼装即可。现在就有很多选择啦,
    a)使用类似django里面Model的模型类
    b)使用ci中的Active Record
    虽然说Model的方式,对数据层的屏蔽较好,但是小组成员普遍认为这种方式过重,轻量的一点的话,最终还是选择了CodeIgniter中的AR。
    OK,那么现在,考验ci模块拆分的好不好的时候到啦!
    具体中间的种种辛苦就不说啦,直说我最终的实现把,拷贝systemdatabase到一个单独的目录,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 " ";
    foreach ($query->result() as $row)
    {
        print $row->ID . " ";
        print $row->user_login . " ";
        print $row->user_email . " ";
    }
    ?>

    输入结果如下:

    Database Driver Class Initialized 1 admin zny2008@gmail.com OK啦~~~ 这样我们如果要在数据访问前需要做权限校验的话,只需要在MYDB函数中做判断即可。 另外,不得不说ci模块拆分的确实不错,instantiate_class是来自于它的systemcodeigniterCommon.php。 log_message我给重写了一下,因为对于每个调用者来说,希望写log的方式是不一样的。(比如我这次就直接打印在了屏幕上。。。。),最近正好 在看设计模式,这种方式也是符合模版方法模式的。

  • 相关阅读:
    替代Reflector的反编译软件ILSpy 1.0正式发布了
    持续集成理论和实践的新进展
    基于hudson搭建持续集成服务器
    URL友好化
    选择持续集成工具需要考虑的几个因素
    http://www.cnblogs.com/msdnchina/archive/2011/07/28/MSDNPortals.html
    Android开发之旅
    Windows 7下安装Android,出现问题的解决方案
    推荐一个很棒的免费自助建站工具:Tap
    第一讲:Android开发环境的搭建
  • 原文地址:https://www.cnblogs.com/hubing/p/3897609.html
Copyright © 2011-2022 走看看