在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类中的查询命令。
本文分析了DiscuzX2.0中的数据库操作类db_mysql与DB的功能及实现方式,介绍了_fetch_array_、_insert_id_等关键函数,并解释了_db_mysql_类的实例化过程。
1752

被折叠的 条评论
为什么被折叠?



