圈小蛙

Discuz! x系列版本查询Mysql数据库操作方法,DB::类与C::t类的函数使用方法

DB类的介绍与使用

DB类定义在文件\source\class\class_core.php,DB类封装常用方法:

DB::table($table) //获取带前缀的表名
DB::delete($table, $condition, $limit = 0, $unbuffered = true) //删除数据
DB::insert($table, $data, $return_insert_id = false, $replace = false, $silent = false) //插入数据
DB::update($table, $data, $condition, $unbuffered = false, $low_priority = false)//更新
DB::insert_id()//返回插入数据后的自增长id
DB::fetch_first($sql, $arg = array(), $silent = false) //取查询的第一条数据
DB::fetch_all($sql, $arg = array(), $keyfield = '', $silent=false) //查询符合条件的所有数据
DB::result_first($sql, $arg = array(), $silent = false)//查询结果集的第一个字段值
DB::query($sql, $arg = array(), $silent = false, $unbuffered = false) //普通查询,执行一条sql语句
DB::limit($start, $limit = 0) //limit条件
DB::order($field, $order = 'ASC')//排序
DB::field($field, $val, $glue = '=')//返回字段条件 $val可以为数组

fetch_all方法的代码:

/*
*	$sql		要执行的sql语句
*	$arg		sql中要用到的参数(数组)
*	$keyfield	返回数组中的键名(若有)
*	$silent		已以哪种方式查询(默认是mysql_query,还有mysql_unbuffered_query)
*/
public static function fetch_all($sql, $arg = array(), $keyfield = '', $silent=false) {
	
	$data = array();
	$query = self::query($sql, $arg, $silent, false);//执行查询
	while ($row = self::$db->fetch_array($query)) {
		//将查询的资源放到$data数组中,若$keyfield有值,则将$keyfield作为$data的key值
		if ($keyfield && isset($row[$keyfield])) {
			$data[$row[$keyfield]] = $row;
		} else {
			$data[] = $row;
		}
	}
	self::$db->free_result($query);//释放资源
	return $data;//二维数组
}

PHP+Mysql所有数据在插入数据库之前,均需要进行addslashes()处理,以免特殊字符未经转义在插入数据库的时候出现错误。Discuz!中所有通过GET, POST获取的参数默认情况下已经使用了addslashes进行了转义。

最常见的查询数据库举例:

获取单条数据:

$rs = DB::fetch_first("SELECT * FROM ".DB::table('common_member')." WHERE uid=1");

或者

$rs=DB::fetch_all("SELECT * FROM %t WHERE uid=%d",array('common_member',1));

获取多条数据:

$rs = DB::fetch_all("SELECT * FROM " .DB::table('common_member')." WHERE uid in(1,2,3,4,5,6,7,8)");

插入数据:

DB::insert('test',array('id'=>NULL,'name'=>'me','uid'=>1));

C类介绍

C类,数据库类定义在目录\source\class\table\目录下,Discuz!对数据库类进行了二次封装,可以有效的利用缓存,好处是所有的查询都集中和复用,方便维护和升级。

使用方法:C::t('tablename')->method();

默认的t方法有以下获得数据方式。每个数据表还需要看具体的表数据定义函数:

函数功能
C::t($tablename)->count()获取表所有行数
C::t($tablename)->update(键值,$data)更新键值数据
C::t($tablename)->delete(键值)删除键值数据
C::t($tablename)->truncate()清空表
C::t($tablename)->insert($data, $return_insert_id,$replace)插入数据
C::t($tablename)->fetch_all($ids)fetch 数据,可以是单一键值或者键值数组
C::t($tablename)->fetch_all_field()fetch所有的字段名表
C::t($tablename)->range($start, $limit, $sort)fetch值域范围
C::t($tablename)->optimize()优化表










Exit mobile version