TP5数据库三种操作方式

原生方式

使用Db进行原生查询query或者写入execute,并且支持参数绑定,命名占位符绑定。
query查询的是一条数据的是一维数组,多条数据是二维数组,如果查询结果为空,则为一维空数组
execute执行的结果是受影响的行数

  • 参数绑定方式
Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
  • 命名占位符绑定方式
Db::query('select * from think_user where id=:id',['id'=>8]);
Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);
查询构造器查询
  • 查询数据

    • find,find 方法查询结果不存在,返回 null,如果存在则返回第一条数据,一维数组
    • select,select 方法查询结果不存在,返回空数组,默认情况下,如果存在,select方法返回的都是二维数组。
    • value,value 方法查询结果不存在,返回 null,如果存在,则返回第一条的某个字段值
    • column,column 方法查询结果不存在,返回空数组,永远是一维数组,可以指定数组的索引
  • 添加数据

    • insert,insert 方法添加数据成功返回添加成功的条数,insert 正常情况返回 1
    • getLastInsID
    • insertGetId
    • insertAll,insertAll 方法添加数据成功返回添加成功的条数
  • 更新数据

    • update,update 方法返回影响数据的条数,没修改任何数据返回 0
    • setField, setField 方法返回影响数据的条数,没修改任何数据字段返回 0
  • 删除数据

    • delete,delete 方法返回影响数据的条数,没有删除返回 0
  • 查询表达式

    • where(字段名,表达式,查询条件)
    • whereOr(字段名,表达式,查询条件)
表达式含义
EQ、=等于(=)
NEQ、<>不等于(<>)
GT、>大于(>)
EGT、>=大于等于(>=)
LT、<小于(<)
ELT、<=小于等于(<=)
LIKE模糊查询
[NOT] BETWEEN(不在)区间查询
[NOT] IN(不在)IN 查询
[NOT] NULL查询字段是否(不)是NULL
[NOT] EXISTSEXISTS查询
EXP表达式查询,支持SQL语法
> time时间比较
< time时间比较
between time时间比较
notbetween time时间比较
  • 链式操作

    • where,支持表达式查询和字符串条件
      $map['id']  = ['>',1];
      $map['mail']  = ['like','%thinkphp@qq.com%'];
      Db::table('think_user')->where($map)->select(); 
      
      Db::table('think_user')->where('type=1 AND status=1')->select(); 
    
    • table,table方法主要用于指定操作的数据表
    • alias,alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等
    • field,field方法属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段,可以用于查询和写入操作
    • order,order方法属于模型的连贯操作方法之一,用于对操作的结果排序
      Db::table('think_user')->where('status=1')->order('id desc,status')->limit(5)->select();
    
    • limit,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多
        Db::table('think_user')
            ->where('status=1')
            ->field('id,name')
            ->limit(10)
            ->select();
        
        Db::table('think_article')->limit(10,25)->select();
    
    • page,是完全为分页查询而诞生的一个人性化操作方法
        Db::table('think_article')->page(1,10)->select();
        // 和下面的用法等效
        Db::table('think_article')->page('1,10')->select();
    
    • group,根据一个或多个列对结果集进行分组,group方法只有一个参数,并且只能使用字符串
        Db::table('think_user')
            ->field('user_id,test_time,username,max(score)')
            ->group('user_id,test_time')
            ->select();
    
    • having,用于配合group方法完成从分组的结果中筛选(通常是聚合条件)数据
    Db::table('think_user')
        ->field('username,max(score)')
        ->group('user_id')
        ->having('count(test_time)>3')
        ->select();
    
    • join,不同类型的join操作会影响返回的数据结果
    连接类型返回结果
    INNER JOIN等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
    LEFT JOIN即使右表中没有匹配,也从左表返回所有的行
    RIGHT JOIN即使左表中没有匹配,也从右表返回所有的行
    FULL JOIN只要其中一个表中存在匹配,就返回行
        Db::table('think_artist')
        ->alias('a')
        ->join('think_work w','a.id = w.artist_id')
        ->join('think_card c','a.card_id = c.id')
        ->select();
    
    • fetchSql,fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法
    $result = Db::table('think_user')->fetchSql(true)->find(1)
    
  • 聚合查询

方法说明
count统计数量,参数是要统计的字段名(可选)
max获取最大值,参数是要统计的字段名(必须)
min获取最小值,参数是要统计的字段名(必须)
avg获取平均值,参数是要统计的字段名(必须)
sum获取总分,参数是要统计的字段名(必须)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值