增删改查
在执行增删改查操作之前,需要先配置数据库。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种方式获取数据操作对象
- 通过 db() 函数
- 通过控制器的配置
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);