增删改查

在执行增删改查操作之前,需要先配置数据库。db 操作类以pdo为基础、全面采用预处理机制、最大程度保证了数据操作的安全性。采用了单利模式,保证一库一连、一表一对象!为高效开发提供了基础。


测试数据表结构

为了方便大家理解,这里以user用户表为例,数据结构如下:

字段 类型 长度 作用
id int 11 主键自动增加
phone bigint 11 手机号
name vachar 20 姓名
age int 3 年龄
money float 10,2 钱包余额
groupid int 11 用户组
addtime int 10 添加时间

user_group用户组表数据结构如下:

字段 类型 长度 作用
id int 11 用户组ID,主键自动增加
gname vachar 20 用户组名称

获取操作对象

可以通过以下2种方式获取数据操作对象

  1. 通过 db() 函数
  2. 通过控制器的配置

db() 函数演示示例

通过全局的 db() 函数可以迅速的获取数据操作对象,函数参数

				
<?php

class indexController extends Mb{
    public function index(){
        $this->db = db('user');
        print_r($this->db);
    }
}
				
			

控制器演示示例

在控制器中配置 $dbName 属性控制器在初始化时会自动获取对应数据表的数据操作对象,并将其保存在 $this->db 变量内。

				
<?php

class indexController extends Mb{
    public $dbName = 'user';
    public function index(){
        print_r($this->db);
    }
}
				
			

添加数据add($data)

功能:向数据表内写入数据
参数:数值形式的数据对象(键名称对应数据表的字段名)
返回:写入数据对应的主键数据值

				
<?php

class indexController extends Mb{
    public $dbName = 'user';
    public function index(){
        $data = ['phone'=>18800008888,'name'=>'张三','age'=>24,'money'=>0.00,'groupid'=>1,'addtime'=>time()];
        $res = $this->db->add($data);
        if($res){
            echo '添加成功,索引ID:'.$res;//添加成功后,系统会自动返回索引ID
        }else{
            echo '添加失败,原因:'.$this->db->error();//添加失败后,可通过error()方法获取失败信息。当然仅建议开发时使用
        }
    }
}
				
			

设置条件 where($where, $whereData)

功能:设置sql条件(预处理机制)
参数:1、条件(使用 ? 作为展位符)2、条件占位符对应的数值(数组格式)


删除数据delete()

功能:删除一条或者多条符合条件的数据
参数:需要配合where使用,如果不适用where则删除全部
返回:true / false

				
<?php

class indexController extends Mb{
    public $dbName = 'user';
	
    public function del(){//按条件删除
        $res = $this->db->where('id = ?', [1])->delete();
        if($res){
            echo '删除成功';
        }else{
            echo '删除失败,原因:'.$this->db->error();
        }
    }
    public function delAll(){//全部删除
        $res = $this->db->delete();
        if($res){
            echo '删除成功';
        }else{
            echo '删除失败,原因:'.$this->db->error();
        }
    }
}
				
			

更新数据 update()

功能:更新符合条件的数据
参数:更新数据(数组格式,键名称对应数据表的字段名)
返回:true / false
说明,如果想精准获取是否修改成功,可以配合rowCount()使用

				
<?php

class indexController extends Mb{
    public $dbName = 'user';
	
    public function update(){//更新数据
        $data = ['name'=>'王富贵'];
        $res = $this->db->where('id = ?', [2])->update($data);
        if($res && $this->db->rowCount() >= 1){//获取影响条数
            echo '更新成功';
        }else{
            echo '更新失败,原因:'.$this->db->error();
        }
    }
}
				
			

对指定的字段进行递加或递减 field()

参数:1、字段名称 2、递加值 (正数递加,负数递减)

				
<?php

class indexController extends Mb{
    public $dbName = 'user';
	
    public function index(){
        $this->db->where('id = ?', [2])->field('money', 100);
    }
}
				
			

查询数据 fetch()/fetchAll()

功能:获取单条数据
参数:查询字段(可省参数,默认 *)
返回:查询成功返回数组形式的数据,失败返回空(可以使用empty函数判断)
说明:可以配合条件进行查询

				
<?php

class indexController extends Mb{
    public $dbName = 'user';
	
    public function fetch(){//查询单条数据
        $res = $this->db->where('id = ?', [2])->fetch();
        print_r($res);
    }
    public function fetchAll(){//查询多条数据
        $res = $this->db->where('name = ?', ['王二狗'])->fetchAll();//返回所有名字叫王二狗的数据,如果去除条件则返回所有
        print_r($res);
    }
}
				
			

查询排序 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 = ?', [2]);
print_r($res);
				
			

queryFetch 和 queryFetchAll()

功能:使用query()函数查询数据时后续的查询函数,queryFetch() 用于单条数据,queryFetchAll()用于多条数据
参数:无。返回:对应的数据(数组形式)

				
$this->db->query('select * from persons where id > ?', [1]);
$arr = $this->db->queryFetchAll();
print_r($arr);
				
			

join() 多表联合

功能:关联其他表查询
参数:联合语句

				
<?php    
class indexController extends Mb{
    public $dbName = 'user';
    public function index(){
        $res =  $this->db->join('as U left join '. $this->db->pre.'user_group as UG on U.groupid = UG.id')->fetchAll('U.*, UG.gname');
        print_r($res);
    }
}
				
			

使用page()函数完成分页

参数:每页数据条目数(可省参数,默认 10条)
返回:数组格式的查询数据
格式:array(数据, 分页信息)

				
<?php    
class indexController extends Mb{
    public $dbName = 'user';
    public function index(){
        $res =  $this->db->page(10)->fetchAll();
        print_r($res);
    }
}
				
			

获取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('money');
echo $sum;
				
			

获取写入数据的主键值 lastInsertId()

				  
$data = ['phone'=>18800008888,'name'=>'张三','age'=>24,'money'=>0.00,'groupid'=>1,'addtime'=>time()];
$res = $this->db->add($data);
echo $this->db->lastInsertId();
				
			

获取操作影响的数据条目数 rowCount()

				  
$res =  $this->db->where('id < ?', [2])->delete();
echo $this->db->rowCount();
				
			

group by

				  
select count('U.*'),UG.Gname from user as U left join user_group as UG on U.groupid = UG.id group by U.groupid ;//原始语句

//代码实现:
$res = $this->db
        ->join('as U left join '.$this->db->pre.'user_group as UG on U.groupid = UG.id group')
        ->group('U.groupid')
        ->fetchAll("count('U.*') as total, UG.Gname");
echo $this->db->getSql();
print_r($res);
				
			

获取mysql版本 mysqlV()

				  
echo $this->db->mysqlV();
				
			

表结构分析

				  
$res = $this->db->desc();
print_r($res);