# 数据库操作
## **Db 概述**
~~~
phpgrace 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 grace{
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 grace{
public $tableName = 'persons';
public function index(){
$this->db->where('id = ?', array(1))->delete();
}
}
~~~
## **更新数据 update()**
功能:更新符合条件的数据
参数:更新数据(数组格式,键名称对应数据表的字段名)
~~~
<?php
class indexController extends grace{
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 grace{
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 grace{
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 grace{
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' => 'grace', '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();
}
~~~
- 快速开始
- phpGrace 介绍
- 环境需求及伪静态设置
- 目录结构及命名规则
- 初始化、原理、分组
- 控制器与路由
- 创建控制器
- 基础控制器
- URL解析规则
- 自定义路由
- URL生成
- 数据与模型
- 数据库配置
- 获取数据库操作对象
- 数据库操作(CURD)
- 数据分页详解
- 事务处理
- 数据验证
- 表单令牌及验证
- 模型创建与调用
- 视图
- 视图文件创建
- 调用、引用视图
- 视图路径模式
- 会话机制
- Cookie 操作
- Session[文件型 ]
- Session [memcache]
- Session [redis]
- 缓存机制
- 缓存概述及配置
- 文件型缓存
- Memcache 形式的缓存
- Memcache介绍
- Memcache安装
- 开启PHP Memcache
- PHP操作Memcache
- Memcache来保存Session
- Memcached图形化管理工具
- Memcache安全相关
- redis 形式的缓存
- Redis介绍
- Redis安装
- 开启 PHP Redis
- Redis图形化管理工具
- PHP操作Redis
- 配置、常量、语言
- 全局配置、分组配置
- 预定义常量
- 语言包使用说明
- 工具
- 函数小工具
- 安全与扩展
- 框架部署安全
- 常规安全
- 扩展说明
- 常用类库
- 图片处理类
- 文件上传类
- IP地址获取类
- 验证码绘制类
- 日期时间换算类
- md5加密类
- 服务器信息类
- curl通信类
- 文件下载类
- 类反射工具
- XML生成与解析
- 汉字转拼音类
- 文件夹操作
- 人民币大写转换类
- 第三方类库
- QQ登录 - web版
- 微信扫码登录-网站
- excel 读写操作
- 阿里云短信接口
- SMTP 邮件发送
- 二维码生成类
- word、pdf 生成类
- 阿里云静态云存储接口类