ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
第7章 TP5.0数据库操作
=========================================================
今日学习
1、TP5.0 支持数据库类型
Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。
2、如何连接数据库
1、配置文件定义
a、配置文件目录
C:\AppServ\www\tp5\application\database.php
b、如何配置
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'yzmedu',
// 用户名
'username' => 'root',
// 密码
'password' => '123456789',
// 端口
'hostport' => '3306',
];
c、如何使用
// 实例化系统数据库类
$DB=new Db;
// 查询数据
$data=$DB::table("user")->select();
// 使用sql语句
$data=$DB::query("select * from user");
2、方法配置
1、使用数组
$Db=Db::connect([
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'yzmedu2',
// 用户名
'username' => 'root',
// 密码
'password' => '123456789',
// 端口
'hostport' => '3306',
]);
2、使用字符串
$Db=Db::connect("mysql://root:123456789@127.0.0.1:3306/yzmedu#utf8");
// 数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
3、如何使用
$data=$Db->table("user")->select();
3、模型类定义
1、创建数据模型
a、命令行创建
1、切换到项目目录
2、执行命令
php think make:model app\index\model\User
b、手动创建
1、打开数据模型目录
C:\AppServ\www\tp5\application\index\model
2、在目录下新建 文件 User.php
3、在文件中书写代码
namespace app\index\model;
use think\Model;
class User extends Model
{
//
}
2、如何设置
class User extends Model
{
// 使用数组配置链接数据库
protected $connection=[
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'yzmedu',
// 用户名
'username' => 'root',
// 密码
'password' => '123456789',
// 端口
'hostport' => '3306',
];
// 使用字符串配置链接数据库
protected $connection="mysql://root:123456789@127.0.0.1:3306/yzmedu#utf8";
}
3、如何控制器中使用
$user=new \app\index\model\User();
// 查询所有的数据
dump($user::all());
3、查询数据
1、tp方法
// 实例化系统数据库类
$DB=new Db;
// 查询数据
$data=$DB::table("user")->select();
2、使用sql语句
// 实例化系统数据库类
$DB=new Db;
// 使用sql语句
$data=$DB::query("select * from user");
4、数据库的基本使用
1、增加
# 返回值 影响行数
$data=Db::execute("insert into user value(null,'user1','123','18')");
$data=Db::execute("insert into user value(null,?,?,?)",['user2','456','20']);
$data=Db::execute("insert into user value(null,:name,:pass,:age)",['name'=>"user3","pass"=>'678','age'=>25]);
2、修改
#返回值 影响行数
$data=Db::execute("update user set age='20' where id=9");
3、删除
#返回值 影响行数
$data=Db::execute("delete from user where id=10");
$data=Db::execute("delete from user where id>?",[15]);
$data=Db::execute("delete from user where id>:id",["id"=>10]);
4、查看
$data=Db::query("select * from user");
$data=Db::query("select * from user where id >=? and id<=?",[5,8]);
5、获取指定sql语句
Db::getLastSql();
6、用户模块
1、命令行 找到项目目录 新建控制器
php think make:controller app\index\controller\Users
2、写资源路由
[详见 代码]
5、TP数据库处理
1、查询操作
1、table方法查询数据
// 查询所有数据
// SELECT * FROM `user`
$data=Db::table("user")->select();
// 查询一条数据
// SELECT * FROM `user` LIMIT 1
$data=Db::table("user")->find();
2、name方法查询数据
// 与配置文件有关
// name 会自动添加配置文件中的表前缀
$data=Db::name("user")->select();
$data=Db::name("user")->find();
3、助手函数
# SELECT * FROM `user`
$data=db("user")->select();
# SELECT * FROM `user` LIMIT 1
$data=db("user")->find();
4、where条件匹配
// SELECT * FROM `user` WHERE `id` > 25
$data=Db::table("user")->where("id",">",25)->select();
// SELECT * FROM `user` WHERE ( `id` > 25 AND `id` < 28 )
$data=Db::table("user")->where("id",">",25)->where("id","<",28)->select();
// SELECT * FROM `user` WHERE `name` LIKE '%user1%'
$data=Db::table("user")->where("name","like","%user1%")->select();
// SELECT * FROM `user` WHERE `name` = 'user3' AND `pass` = 'qwe'
$data=Db::table("user")->where("name","user3")->where("pass",'qwe')->select();
// SELECT * FROM `user` WHERE ( id > 25 and id <28 )
$data=Db::table("user")->where("id > 25 and id <28")->select();
// SELECT * FROM `user` WHERE `id` > 25 AND `name` = 'user10'
$data=Db::table("user")->where(["id"=>[">",25],"name"=>'user10'])->select();
// SELECT * FROM `user` WHERE ( `id` > 25 AND `id` < 28 )
$data=Db::table("user")->where(["id"=>[">",25]])->where(['id'=>["<",28]])->select();
5、whereOr 或者匹配
// SELECT * FROM `user` WHERE `id` <= 23 OR `id` >= 28
$data=Db::table("user")->where("id","<=",23)->whereOr("id",">=",28)->select();
// SELECT * FROM `user` WHERE `name` LIKE '%user1%' OR `name` LIKE '%user2%'
$data=Db::table("user")->where("name","like","%user1%")->whereOr("name","like","%user2%")->select();
6、limit 截取数据
// SELECT * FROM `user` LIMIT 5
$data=Db::table("user")->limit(5)->select();
// SELECT * FROM `user` LIMIT 5,5
$data=Db::table("user")->limit(5,5)->select();
7、Order 排序
// SELECT * FROM `user` ORDER BY `id`
$data=Db::table("user")->order("id")->select();
// SELECT * FROM `user` ORDER BY `id` desc
$data=Db::table("user")->order("id","desc")->select();
8、field 设置查询字段
// 设置查询字段
// SELECT `name`,`pass` FROM `user`
$data=Db::table("user")->field("name,pass")->select();
$data=Db::table("user")->field(['name','pass'])->select();
// 起别名
// SELECT name uname,`pass` FROM `user`
$data=Db::table("user")->field("name uname,pass")->select();
$data=Db::table("user")->field(['name'=>"uname",'pass'])->select();
// sql 的系统函数
// SELECT count(*) as tot FROM `user`
$data=Db::table("user")->field("count(*) as tot")->select();
$data=Db::table("user")->field(['count(*)'=>"tot"])->select();
// 排除字段
// SELECT `id`,`age` FROM `user`
$data=Db::table("user")->field("name,pass",true)->select();
$data=Db::table("user")->field(["name",'pass'],true)->select();
9、Page 实现分页效果
// SELECT * FROM `user` LIMIT 5,5
$data=Db::table("user")->page("1,5")->select();
10、Group分组聚合
// SELECT `pass`,count(*) tot FROM `user` GROUP BY pass
$data=Db::table("user")->field("pass,count(*) tot")->group("pass")->select();
11、having 过滤
// 只能结合分组使用
// SELECT `pass`,count(*) tot FROM `user` GROUP BY pass HAVING tot >=2
$data=Db::table("user")->field("pass,count(*) tot")->having("tot >=2")->group("pass")->select();
12、多表查询
// select goods.*,type.name tname from type,goods where goods.cid=type.id
$data=Db::query("select goods.*,type.name tname from type,goods where goods.cid=type.id");
// 内联实现数据库链接
// SELECT `goods`.*,type.name tname FROM `goods` INNER JOIN `type` `type` ON `goods`.`cid`=`type`.`id`
$data=Db::table("goods")->field("goods.*,type.name tname")->join("type","goods.cid=type.id")->select();
// 右链接
// SELECT `goods`.*,type.name tname FROM `goods` RIGHT JOIN `type` `type` ON `goods`.`cid`=`type`.`id`
$data=Db::table("goods")->field("goods.*,type.name tname")->join("type","goods.cid=type.id",'right')->select();
// 左链接
$data=Db::table("goods")->field("goods.*,type.name tname")->join("type","goods.cid=type.id",'left')->select();
13、别名使用-给表起别名
// SELECT `g`.*,t.name tname FROM `goods` `g` LEFT JOIN `type` `t` ON `g`.`cid`=`t`.`id`
$data=Db::table("goods")->alias("g")->field("g.*,t.name tname")->join("type t","g.cid=t.id",'left')->select();
14、union集合
// SELECT `name` FROM `user` UNION select name from goods
$data=Db::field("name")->table("user")->union("select name from goods")->select();
15、参数绑定(bind) 为了防止sql注入
# DELETE FROM `user` WHERE `id` = 25
$id=input("id");
$data=Db::table("user")->where("id",":id")->bind(["id"=>[$id,\PDO::PARAM_INT]])->delete();
16、数据统计
// SELECT MAX(age) AS tp_max FROM `user` LIMIT 1
$data=Db::table("user")->max("age");
// SELECT MIN(age) AS tp_min FROM `user` LIMIT 1
$data=Db::table("user")->min("age");
// SELECT AVG(age) AS tp_avg FROM `user` LIMIT 1
$data=Db::table("user")->avg("age");
// SELECT SUM(age) AS tp_sum FROM `user` LIMIT 1
$data=Db::table("user")->sum("age");
// SELECT COUNT(age) AS tp_count FROM `user` LIMIT 1
$data=Db::table("user")->count("age");
17、视图查询
$data=Db::view("goods","id,name,price")
->view("type",'name tname',"type.id=goods.cid")
->select();
// SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `goods` `goods` INNER JOIN `type` `type` ON `type`.`id`=`goods`.`cid`
$data=Db::view("goods","id,name,price")
->view("type",'name tname',"type.id=goods.cid","left")
->select();
// SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `goods` `goods` LEFT JOIN `type` `type` ON `type`.`id`=`goods`.`cid`
2、增加操作
1、插入单条数据
// 数组中的字段名 必须和数据库中的字段名一致
$data=["name"=>"张三","pass"=>"123","age"=>18,];
$code=Db::table("user")->insert($data);
$code=db("user")->insert($data);
// INSERT INTO `user` (`name` , `pass` , `age`) VALUES ('张三' , '123' , 18)
// 返回值 影响行数
2、插入多条数据
$data=[
["name"=>"张三1","pass"=>"123","age"=>15,],
["name"=>"张三2","pass"=>"123","age"=>19,],
];
$code=Db::table("user")->insertAll($data);
$code=db("user")->insertAll($data);
// 返回值 影响行数
3、获取最后一次插入ID
$data=["name"=>"张三","pass"=>"123","age"=>18,];
$code=Db::table("user")->insertGetId($data);
$code=db("user")->inserGetId($data);
// 返回值最后插入的id
3、更新数据
1、修改数据
$code=Db::table("user")->where("id",">",'60')->update(["pass"=>"qwe","age"=>2]);
// UPDATE `user` SET `pass`='qwe',`age`=2 WHERE `id` > 60
// 返回值 影响行数
$code=Db::table("user")->update(['age'=>52,"id"=>62]);
// UPDATE `user` SET `age`=52 WHERE `id` = 62
$code=Db::table("user")->where("id",73)->setField("pass",'abc');
// UPDATE `user` SET `pass`='abc' WHERE `id` = 73
2、设置自增
$code=Db::table("user")->where("id",63)->setInc("age");
// UPDATE `user` SET `age`=age+1 WHERE `id` = 63
$code=db("user")->where("id",66)->setInc("age");
// UPDATE `user` SET `age`=age+1 WHERE `id` = 66
3、设置自减
// UPDATE `user` SET `age`=age-1 WHERE `id` = 62
$code=Db::table("user")->where("id",62)->setDec("age");
$code=Db::table("user")->where("id",62)->setDec("age",3);
// UPDATE `user` SET `age`=age-3 WHERE `id` = 62
$code=db("user")->where("id",63)->setDec("age",3);
// UPDATE `user` SET `age`=age-3 WHERE `id` = 63
4、删除数据
1、删除一条数据
$code=Db::table("user")->where("id","71")->delete();
$code=Db::table("user")->delete(70);
2、删除多条数据
$code=Db::table("user")->where("id in(51,54,55)")->delete();
$code=Db::table("user")->delete([62,63,66]);
3、删除区间数据
$code=Db::table("user")->where("id>40 and id<45")->delete();
// DELETE FROM `user` WHERE ( id>40 and id<45 )
6、事务机制
1、事务
张三 银行卡 1000, 李四 银行卡 500, 张三给李四转账200
1) 银行 先扣除 张三的200
2) 银行 将200 给了李四
2、mysql事务
mysql事务 要求 数据库的引擎必须 InnoDB
3、使用
1、自动控制事务
Db::transaction(function(){
// 删除一条数据
Db::table("user")->delete(40);
// 删除数据
Db::table("user")->deletes();
});
2、手动控制事务 (***)
// 开启事务
Db::startTrans();
// 事务
try{
// 删除数据id 31
$a=Db::table("user")->delete(31);
// 判断是否删除成功
if (!$a) {
throw new \Exception("删除id 31 数据没有成功");
}
// 删除不存在的数据 id 32
$b=Db::table("user")->delete(32);
// 判断是否删除成功
if (!$b) {
throw new \Exception("删除id 32 数据没有成功");
}
// 执行提交操作
Db::commit();
}catch(\Exception $e){
// 回滚事务
Db::rollback();
// 获取提示信息
dump($e->getMessage());
}
// ==================================================================
// 开启事务
Db::startTrans();
// 删除数据 33
$a=Db::table("user")->delete(33);
// 删除数据 34
$b=Db::table("user")->delete(34);
// 判断条件
if ($a && $b) {
// 提交事务
Db::commit();
}else{
// 回滚事务
Db::rollback();
}
ThinkPHP5.0框架开发--第7章 TP5.0数据库操作的更多相关文章
- ThinkPHP5.0框架开发--第5章 TP5.0 控制器
ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...
- ThinkPHP5.0框架开发--第4章 TP5.0路由
ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...
- ThinkPHP5.0框架开发--第3章 TP5.0 配置
ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...
- ThinkPHP5.0框架开发--第1章 Tp5.0安装
ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...
- ThinkPHP5.0框架开发--第2章 TP5.0架构
ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...
- ThinkPHP5.0框架开发--第11章 TP5.0 杂项
ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...
- ThinkPHP5.0框架开发--第10章 TP5.0验证器
ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...
- ThinkPHP5.0框架开发--第9章 TP5.0视图和模板
ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...
- ThinkPHP5.0框架开发--第8章 TP5.0 模型
ThinkPHP5.0框架开发--第8章 TP5.0 模型 第8章 TP5.0 模型 ================================================= 今日学习 1. ...
随机推荐
- Directx Matrix.PerspectiveFovLH Matrix.PerspectiveFovRH的理解
该函数一个四个参数public static Matrix PerspectiveFovLH ( float fieldOfViewY, float aspectRatio, float znearP ...
- nyoj--114--某种序列(滚动数组)
某种序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 ...
- c#中集成Swagger
Swagger是什么? 官方说法:Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文 ...
- QT-helloworld-QtCreater编写
前言:纯代码编写helloworld,解析代码含义. 一.新建空项目 新建->其他项目->Empty qmake Project 二.修改.pro文件 打开helloworld.pro文件 ...
- ES6 | ES6新语法 在编码实践中的应用
本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 多家公司和组织已经公开了它们的风格规范,本文的内容主要参考了 ...
- BZOJ4819: [Sdoi2017]新生舞会(01分数规划)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1029 Solved: 528[Submit][Status][Discuss] Descripti ...
- UWP 开发APP准备工作
每新建一个UWP之后,都要进行一番相同的处理步骤,才能使Mobile的使用体验更好,故总结如下: 1.订阅Mobile后退导航事件 在App.xaml.cs文件中OnLaunched方法中添加 Sys ...
- jQuery应用实例2:简单动画
效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- update没带where,寻找问题的思路
数据库版本:5.6.16 前几天,在测试环境中,不知道为什么突然之间,所有的一个字段值全部变成了12,需要将备份还原后开发重新清理垃圾数据并开始测试. 在开发提供 SQL语句的情况下,能否查到是谁做了 ...
- 响应式网页设计:互联网web产品RWD概念
RWD(Responsive Web Design)可称为自适应网页设计.响应式网页设计.响应式网页设计等等,是一种可以让网页的内容可以随着不同的装置的宽度来调整画面呈现的技术,让使用者可以不需要透过 ...