Discuz x2.0数据库类源码分析

本文分析了DiscuzX2.0中的数据库操作类db_mysql与DB的功能及实现方式,介绍了_fetch_array_、_insert_id_等关键函数,并解释了_db_mysql_类的实例化过程。

在discuz x2.0中数据库类都写在\source\class\class_core.php这个文件中。列出两个类的几个函数来分析:

/**
 * Discuz MySQL 类的支持 程序中不直接使用
 *
 */
class db_mysql
{
      function fetch_array($query, $result_type = MYSQL_ASSOC) {
            return mysql_fetch_array($query, $result_type);
      }
      ..........
      ..........
}
/**
 * 对Discuz CORE 中 DB Object中的主要方法进行二次封装,方便程序调用
 *
 */
class DB
{
         function fetch($resourceid, $type = MYSQL_ASSOC) {
               return DB::_execute('fetch_array', $resourceid, $type);
         }

        function insert_id() {
              return DB::_execute('insert_id');
        }


       /**
       * 执行db_mysql类中的查询命令
       * @param    string $cmd 查询命令
       * @param    mixed $arg1   参数1
       * @param    mixed $arg2  参数2
       * @return   mixed
       */
        function _execute($cmd , $arg1 = '', $arg2 = '') {
	        static $db;
                if(empty($db)) $db = & DB::object();
                $res = $db->$cmd($arg1, $arg2);
                return $res;
	}


	/**
	 * 返回 DB object 指针
	 * @return pointer of db object from discuz core
         * @return object
	 */
	function &object($dbclass = 'db_mysql') {
	     static $db;
             if(empty($db)) $db = new $dbclass();
             return 
	}
        ..............
        ..............

}

db_mysql是最基本的数据库查询类,不直接使用,在DB类中实例化后才使用。

&object(),这里实例化db_mysql类,一个页面只实例化一个。返回链接句柄。

_execute()函数执行db_mysql类中的查询命令。



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值