基本数据库类(core/db.php)

Source:phpbone.com  Author:IT柏拉图
2013-11-20

    为了简化调用,phpbone框架里核心主张都是以静态类为主,框架数据库主要考虑使用mysql,并没考虑其它数据库
的情况,因此并没带有很复杂的数据库驱动之类的数据库类结构,不过考虑不同环境的兼容性,仍然对在没开启mysqli
的比较旧的环境,兼容传统的mysql函数,数据库类简易结构如下图所示:



关于lurd类的操作,另开文档说明,基础数据库操作以db类为主,db类的成员方法都是静态方法,因此使用时
不需要初始化,主要操作如下:
常量:
DB_GET_ASSOC
DB_GET_NUM
DB_GET_BOTH
(等同于MYSQLI_ASSOC/MYSQL_ASSOC、MYSQLI_NUM/MYSQL_NUM、MYSQLI_BOTH/MYSQL_BOTH)

一、执行一个查询
$rsid = db::query ($sql, $is_master = false)
参数:
1、$sql    要运行的SQL语句,可以是查询语句,也可以是update类语句
2、$is_master  读写分享参数,默认false为只读服务器,true为可写用于create、update、insert、delete等情况
返回值 $rsid 是查询游标
db::query_over( $sql )
执行一个操作出错也不中断的sql语句,操作一些安全性要求不高的数据批量插入更新操作,为了防止程序中断,
可以用这函数。

二、从特定查询游标获取一条记录
db::fetch_one ($rsid, $result_type = DB_GET_ASSOC)
return array || false
fetch_one 实际是在执行query后才进行获取单条数据的方法,通常在 while 里可以用 while($row = db::fetch_one()) 如:

  1. $query = "Select * From `{$this->user_table}` limit 100 ";  
  2. $q = db::query($query);  
  3. while$row = db::fetch_one($q) ) 
  4.    $rows[] = $row
  5. print_r( $rows ); 

如果只是用指定的SQL获取单条记录,使用下面方式会更简便:
db::get_one ($sql, $result_type = DB_GET_ASSOC)
示例:

  1. $query = "Select * From `{$this->user_table}` where `uid`='{$this->uid}' "
  2. $q = db::query($query); 
  3. $fields = db::fetch_one($q); 

上面代码可以简化为:

  1. $query = "Select * From `{$this->user_table}` where `uid`='{$this->uid}' ";  
  2. $fields = db::get_one($query);  


三、获取上次查询爱影响的记录数
db::affected_rows()
return int

四、返回某次查询所得的总记录数
db::num_rows ( $rsid )
return int
$rsid 参数是执行query查询时设定的游标数字默认是当前程序执行的query次数

五、获得上次 insert 操作的自动递增id
db::insert_id ()
return int

六、返回上次查询的所的记录
db::fetch_all ($rsid, $result_type=DB_GET_ASSOC)
return array
$rsid 参数是执行query查询时设定的游标默认是当前程序执行的query次数
db::get_all($sql, $key='')
获取一个sql查询的所有记录
$key 参数是指返回的记录数组使用其中指定的字段作为key,不指定则用普通的顺序数组。
与 db::fetch_all() 对比,fetch_all 第一个参数是sql查询游标,而不是sql语句,
此外get_all默认$result_type 为 DB_GET_ASSOC,没有指定其它游标的选项。

七、使用新的连接(用于多数据库操作)
db::set_connect ($linkname, $config)
$linkname     连接名(随便定义,default是默认的连接)
$config         数据库配置信息(必须按$GLOBALS['config']['db']数组的格式定义)
return void
db::set_connect_default( $config='' )  恢复到默认的连接
$config 可选,没指定的情况下,默认使用$GLOBALS['config']['db']

应用场景:假设从B数据库查询数据插入A数据库,那么在进行查询前先通过 db::set_connect ($linkname, $config) 切换到B数据库,在循环记录集时,db::set_connect_default() 回到数据库A,然后把B的数据插入A的数据库中,再切换回db::set_connect ($linkname, $config),继续循环。

八、事务处理相关操作
db::autocommit ( $mode = 0)
设置是否自动提交事务
$mode 0 | 1 
return void

db::begin_tran( )
开始事务
return void

db::commit ( )
执行事务
return void

db::rollback( )
回滚事务
return void

九、分页函数
db::pagination( $url = '', $config = array() )
return string
返回分页列表
$config = array(
    'count_num' => 0,                    //总记录数
     'pagesize' => 0,                        //每页记录数
     'pagename' => 'pageno',        //分页变量名
     'cur_page' => 1,                        //当前页( 使用 request('pageno', 1, 'int') 获得此值 )
     'css_class' => 'lurd-pager'       //分页区块代码样式类名
);
 

十、lurd简化操作
db::insert($table, $data, $string_safe = 0)
通过指定一个数据数组向指定表进行插入操作
$table                  表名
$data                   field => value 数据
$string_safe         过滤级别  0 不过滤  1 为禁止不安全HTML内容(javascript等),2 完全禁止HTML内容,并替换部份不安全字符串(如:eval(、union、CONCAT(、--、等)

db::update( $table, $data, $condition = '', $string_safe = 0 )
通过指定一个数据数组向指定表进行更新操作
如果$data数据含有唯一索引(不能由多个字段混合)或主键数据,$condition限制条件可以为空。

 

分享到: