🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**FrPHP Db 概述** ~~~ FrPHP db 操作类以pdo为基础、全面采用预处理机制、最大程度保证了数据操作的安全性。采用了单利模式,保证一库一连、一表一对象!为高效开发提供了基础。 大部分的数据操作都无需编写复杂的sql命令,简单配置即可。 ~~~ **准备工作:数据库信息配置** 使用数据库操作前,请打开保证数据库配置正确!具体操作见上一节 ^\_^ **数据操作详解 **下文将以数据表 persons为例,数据结构 : | 字段 | 类型 | 长度 | 作用 | | --- | --- | --- | --- | | id | int | 10 | 主键自动增加 | | name | vachar | 20 | 姓名 | | age | int | 4 | 年龄 | | addtime | int | 11 | 添加时间 | | classid | int | 10 | 班级id 索引 | **增加数据 add($data)** 功能:向数据表内写入数据。 参数:数值形式的数据对象(键名称对应数据表的字段名) 返回:写入数据对应的主键数据值 ~~~ <?php class indexController extends FrBase{     public $tableName = 'persons';     public function index(){         $addData  = array('name' => 'grace', 'age' => mt_rand(10, 200));         $personId = $this->db->add($addData);         if($personId){             echo '写入数据成功,主键:'.$personId;             echo '<br />'.$this->db->getSql();         }else{             echo '<br />'.$this->db->error();         }     } } ~~~ **获取最近一次执行的操作命令 getSql()** 功能:获取最近一次执行的操作命令 参数:无 返回:最近一次执行的操作命令 **设置条件 where($where, $whereData)** 功能:设置sql条件(预处理机制) 参数:1、条件(使用 ? 作为展位符)2、条件占位符对应的数值(数组格式) **删除数据 delete()** 功能:删除一条或者多条符合条件的数据 参数:无 返回:true / false ~~~ <?php class indexController extends FrBase{     public $tableName = 'persons';     public function index(){         $this->db->where('id = ?', array(1))->delete();     } } ~~~ **更新数据 update()** 功能:更新符合条件的数据 参数:更新数据(数组格式,键名称对应数据表的字段名) ~~~ <?php class indexController extends FrBase{     public $tableName = 'persons';     public function index(){ $data = array('name' => 'phpGrace');         $this->db->where('id = ?', array(2))->update($data);     } } ~~~ **对指定的字段进行递加或递减 field()** 参数:1、字段名称 2、递加值 (正数递加,负数递减) ~~~ <?php class indexController extends FrBase{     public $tableName = 'persons';     public function index(){         $this->db->where('id = ?', array(2))->field('age', 1);     } } ~~~ **获取单条数据 fetch()** 功能:获取单条数据 参数:查询字段(可省参数,默认 \*) 返回:查询成功返回数组形式的数据,失败返回空(可以使用empty函数判断) 说明:可以配合条件进行查询 ~~~ $arr = $personModel->where('id = ?', array(2))->fetch(); print_r($arr); ~~~ **获取多条数据 fetchAll()** 功能:获取单条数据 参数:查询字段(可省参数,默认 \*) 返回:查询成功返回数组形式的数据,失败返回空(可以使用empty函数判断) 说明:可以配合条件、排序、分页等方法进行查询 ~~~ <?php class indexController extends FrBase{     public $tableName = 'persons';     public function index(){         $data = $this->db->fetchAll(); p($data);     } } ~~~ **查询排序 order()** 功能:设置排序规则 参数:排序规则 ~~~ $data = $this->db->order('id desc')->fetchAll(); ~~~ **查询数据截取 limit($start, $num)** 功能:设置limit,截取数据 参数:1、起始位置, 2、数据条目数 ~~~ $data = $this->db->order('id desc')->limit(0, 10)->fetchAll(); ~~~ **执行自定义的sql命令 query($sql, $execute)** 参数:1、sql命令(如果有条件推荐使用展位符 ?), 2、占位符对应的数据(可省参数,sql命令包含占位符时传递) ~~~ $res = $this->db->query('delete from persons where id = ?', array(2)); print_r($res); ~~~ **queryFetch 和 queryFetchAll()** 功能:使用query()函数查询数据时后续的查询函数,queryFetch() 用于单条数据,queryFetchAll()用于多条数据。 参数:无 返回:对应的数据(数组形式) ~~~ $this->db->query('select * from persons where id > ?', array(1)); $arr = $this->db->queryFetchAll(); print_r($arr); ~~~ **使用join() 完成多表联合** 参数:联合语句 示例表 classes 表结构 | 字段 | 类型 | 长度 | | --- | --- | --- | | id | int | 10 | | class\_name | varchar | 20 | ~~~ <?php     class indexController extends FrBase{     public $tableName = 'persons';     public function index(){         $arr =  $this->db->join('as a left join '.sc('db','pre').'classes as b on a.classid = b.id')->fetchAll('a.*, b.class_name');          print_r($arr);     } } ~~~ **使用page()函数完成分页** 参数:每页数据条目数(可省参数,默认 10条) 返回:数组格式的查询数据 格式:array(数据, 分页信息) ~~~ <?php $arr =  $this->db->page(1)->fetchAll(); print_r($arr); ~~~ **获取sql错误方法 error() ** ~~~ echo $this->db->error(); ~~~ **获取原生的pdo操作对象 getDb()** ~~~ $pdo =  $this->db->getDb(); var_dump($pdo); ~~~ **计算数据条目总数 count()** ~~~ $count =  $this->db->count(); echo $count; ~~~ **指定字段的数据最大值 max(字段)** ~~~ $max =  $this->db->max('age'); echo $max; ~~~ **指定字段的数据最小值 min(字段)** ~~~ $min =  $this->db->min('age'); echo $min; ~~~ **指定字段的数据平均值 avg(字段)** ~~~ $avg =  $this->db->avg('age'); echo $avg; ~~~ **指定字段的数据总和 sum(字段)** ~~~ $sum =  $this->db->sum('age'); echo $sum; ~~~ **获取写入数据的主键值 lastInsertId()** ~~~ $res =  $this->db->add(array('name' => 'user', 'age' => 18, 'addtime' => 10585888, 'classid' => 1)); echo $this->db->lastInsertId(); ~~~ **获取操作影响的数据条目数 rowCount()** ~~~ $res =  $this->db->where('id < ?', array(2))->delete(); echo $this->db->rowCount(); ~~~ **group by** ~~~ //原始语句 select count('a.*'),  b.class_name from persons as a left join classes as b on a.classid = b.id group by a.classid ; //代码实现: $res = $this->db         ->join('as a left join '.sc('db', 'pre').'classes as b on a.classid = b.id')         ->group('a.classid')         ->fetchAll("count('a.*') as total, b.class_name"); echo $this->db->getSql().'--'; print_r($res); ~~~ **获取mysql版本 mysqlV()** ~~~ echo $this->db->mysqlV(); ~~~ **表结构分析** ~~~ $res = $this->db->desc(); print_r($res); ~~~ **使用 debugSql 在控制台内输出执行的 sql** ~~~ public function index(){     $db = db('names');     $db->fetchAll();     // 在执行sql 后调用 debugSql 即可在控制台内输出刚刚执行的sql 命令     $db->debugSql();     $db->fetchAll("name");     // 在执行sql 后调用 debugSql 即可在控制台内输出刚刚执行的sql 命令     $db->debugSql(); } ~~~