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数据库操作的更多相关文章

  1. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

  2. ThinkPHP5.0框架开发--第4章 TP5.0路由

    ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...

  3. ThinkPHP5.0框架开发--第3章 TP5.0 配置

    ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...

  4. ThinkPHP5.0框架开发--第1章 Tp5.0安装

    ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...

  5. ThinkPHP5.0框架开发--第2章 TP5.0架构

    ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...

  6. ThinkPHP5.0框架开发--第11章 TP5.0 杂项

    ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...

  7. ThinkPHP5.0框架开发--第10章 TP5.0验证器

    ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...

  8. ThinkPHP5.0框架开发--第9章 TP5.0视图和模板

    ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...

  9. ThinkPHP5.0框架开发--第8章 TP5.0 模型

    ThinkPHP5.0框架开发--第8章 TP5.0 模型 第8章 TP5.0 模型 ================================================= 今日学习 1. ...

随机推荐

  1. c13--数组

    // // main.c // 进制查表法 // // Created by xiaomage on 15/6/10. // Copyright (c) 2015年 xiaomage. All rig ...

  2. iOS 权限判断 跳转对应设置界面

    相机权限 1.1 使用说明 在合适的地方导入#import <AVFoundation/AVFoundation.h> 使用AVAuthorizationStatus类获取当前权限状态 在 ...

  3. DB-MySQL:MySQL 序列使用

    ylbtech-DB-MySQL:MySQL 序列使用 1.返回顶部 1. MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想 ...

  4. 23.QFile遍历

    #include "mainwindow.h" #include <QApplication> #include <QDebug> #include < ...

  5. windows服务更改配置文件

    现场部署的服务所在文件夹内容如上图所示,由于现场数据库服务器更改了IP,所以我服务里的数据库连接字符串也需要修改(注意到日志文件,从某天改了IP后就再也连不上数据库了) 修改过程: 1.打开服务管理, ...

  6. 移动互联网iOS工程师必须知道的三点

    如果十年磨一剑,那么现在起作为一名iOS工程师,以下三点你必须要知道: 1.现在开始学swift正是时候,永远不要怕晚 因为…新时代的程序语言Swift有很多优势,长江后浪推前浪,Swift上手快,开 ...

  7. 关于C++程序运行程序是出现的this application has requested the runtime to terminate it in an unusual way. 异常分析

    今天运行程序是出现了this application has requested the runtime  to terminate it in an unusual way. 的异常报告,以前也经常 ...

  8. 如何巧妙使用ZBrush中的Image Plane插件

    ZBrush®插件Image Plane提供了一种简单的方法加载图像到ZBrush中,以在添加纹理过程中进行使用,比如使用ZProject笔刷多边形着色,以及利用参考图建模等. ZBrush 中文版下 ...

  9. sql limit 的用法

    sql语句里的limit使用方法 .    SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset    在我们使用查询语句的时候 ...

  10. Linux系统串口接收数据编

    http://blog.csdn.net/bg2bkk/article/details/8668576 之前基于IBM deveplopworks社区的代码,做了串口初始化和发送的程序,今天在此基础上 ...