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() | 优化表 |