02-ThinkPHP数据库操作

<?php
namespace app\controller;

use app\BaseController;

//! 2、引入Db门面类
use think\facade\Db;

//! 15、引入Request门面类
use think\facade\Request;

use app\model\OykUser;
use app\model\User;

public function two(){

         Db::table('oyk_user')->select();
     //! 1、where条件
         在第二个参数添加符号,如果是等号,可以省略
     // = 、<>(不等于) 、> 、< 、>= 、<= 
         $ret = Db::table('oyk_user')->where('uid',2)->select();
         print_r($ret);

     //! 1.2、模糊查询:LIKE它不是=号,直接写的值,必须处理
     // 如果没有处理,相当于等号
     // %符号,匹配任意的文本,任意的长度
     // 如果你要查询的文本,你不知道在字段中的位置,你需要在两边都增加%
         $ret = Db::table('oyk_user')->where('nickname','like','%小编%')->select();
         print_r($ret);

     //! 1.3、NOTLIKE 模糊查询 取反
         $ret = Db::table('oyk_user')->where('nickname','notlike','%小编%')->select();
         print_r($ret);

     //! 1.4、BETWEEN 查询区间  NOTBETWEEN区间取反
         $ret = Db::table('oyk_user')->where('uid','between','5,10')->select();
         print_r($ret);

     //! 1.5、IN NOTIN
         $ret = Db::table('oyk_user')->where('uid','in','9,12,15')->select();
         print_r($ret);

     //! 1.6、<>不等于
         $ret = Db::table('oyk_user')->where('uid','<>','3')->select();
         print_r($ret);

     //! 2、field返回值,使用数组的形式
         $ret = Db::table('oyk_user')->field([
             'uid',
             'nickname'
         ])->select();

     // 或者
         $arr = [
             'uid'=>'id',
             'nickname'=>'name'
         ];
         $ret = Db::table('oyk_user')->field($arr)->select();
         print_r($ret);

     //! 2.1、如果字段比较多,其中几个不要,可以用更方便的方法,WithoutField
         $arr = [
             'add_time',
             'password',
             'add_ip',
             'last_time',
             'last_ip'
         ];
         $ret = Db::table('oyk_user')->WithoutField($arr)->select();
         print_r($ret);

     //! 3、order 排序 原生:order by
     // 参数1:字段名,参数2:排序类型->desc(倒序)asc(正序)
         $ret = Db::table('oyk_user')->order('uid','DESC')->select();
     // 如果不写的话,默认uid为第一排序,也可以手动写第一排序和第二排序
         $ret = Db::table('oyk_user')->order('last_time','DESC')->order('uid','DESC')->select();
         print_r($ret);

     //! 4、以上学习的Db方法,可以一起使用链式操作
         $ret = Db::table('oyk_user')->field('uid','nickname')->where('uid','>=','10')->order('last_time','DESC')->order('uid','DESC')->select();
         print_r($ret);

     //! 5、可以返回最后执行的mysql原生语句 getLastSql()
         Db::table('oyk_user')->field('uid','nickname')->where('uid','>=','10')->order('last_time','DESC')->order('uid','DESC')->select();
         echo Db::getLastSql();
         print_r($ret);

     //! 6、在链式操作时使用fetchSql(),Db语句不执行,仅返回所表示的mysql原生语句
     // 比如添加、修改,对数据库进行修改的语句,可以先看下语句
         $ret = Db::table('oyk_user')->field('uid','nickname')->where('uid','>=','10')->order('last_time','DESC')->order('uid','DESC')->fetchSQl()->select();
         print_r($ret);

     //! 7、分页 limit
     // 第一个参数: 从第多少条取(不包括当前)
     // 第二个参数: 取出多少条
     // 如果只有一个参数,就是从第一条开始,取多少条
         $ret = Db::table('oyk_user')->limit(5,3)->select();
         print_r($ret);

     // $p = 0 第一页
     // $p = $p + 5 第二页
     // $p = $p + 5  第三页
     // $p = $_GET['p'];  //0 5 10
     // $p = $_GET['p'];  //1 2 3 4
     // 如果用limit,我们比page多一步操作,就是计算当前条数
     // $p = $p * 5;
         $ret = Db::table('oyk_user')->limit($p,5)->select();
     // 取出多少条
         $ret = Db::table('oyk_user')->limit(5)->select();

     //! 8、分页 page(thinkphp自带方法)
     // 第一参数 是(自定义的)第几页
     // 第二参数 取出多少条
     // 1 5 uid 1 - 5
     // 2 5 uid 6 - 10

     // 如果做翻页,使用page更方便一些
         $p = $_GET['p'];
         $ret = Db::table('oyk_user')->page($p,5)->select();
         print_r($ret);

     // $p++;

     //! 9、聚合查询
     // oyk_user 要知道这个表里有多少条数据
     // 9.1、count
         $ret = Db::table('oyk_user')->count();
         print_r($ret);

     // 或者

         $ret = Db::table('oyk_user')->select()->toArray();
         echo count($ret);

     // 9.2、max最大值
     // 9.3、min最小值
     // 排行榜,就可以用这个来完成,和count搭配
         $ret = Db::table('oyk_user')->max('uid');
         $ret = Db::table('oyk_user')->min('uid');
         print_r($ret);

     //! 10、多条 where 其SQL原生语句是AND
        $ret = Db::table('oyk_user')->where('last_time','>',1660896721)->where('last_time','>',1661521699)->select();
         $ret = Db::table('oyk_user')
                ->where([
                 ['last_time','>',1660896721],
                 ['last_time','<',1661521699],
                ])
                ->select();
     // 也可以使用二维数组传值where条件
     // print_r($ret);

     //! 11、or 提供了whereOr方法
     // 这里可以有多个条件,写成数组 或者 多个whereOr
         $ret = Db::table('oyk_user')->where('uid','=',6)->whereOr('uid','=',10)->select();
         print_r($ret);

     //! 12、访问其它数据库中的表,多数据库操作 connect 改变数据库,切换数据库
         $ret = Db::connect('dsp')->table('oyk_user')->select();
         print_r($ret);

     //! 13、数据处理
     //! 13.1、toArray把返回的数据,类型为对象转换为数组
         $ret = Db::table('oyk_user')->select()->toArray();
         print_r($ret);

     //! 13.2、isEmpty 判断数据是否为空
         $ret = Db::table('oyk_user')->where('uid',999)->select()->toArray();
         if(empty($ret)){
             echo '结果为空'; 
         }
         print_r($ret);

     // 如果使用isEmpty()就不需要加toArray()了
         $ret = Db::table('oyk_user')->where('uid',999)->select();
         if($ret->isEmpty()){
             echo '结果为空'; 
         }

     // merge 合并其它数据
         $ret1 = Db::table('oyk_user')->where('uid',999)->select();
         $ret2 = Db::table('oyk_user')->where('uid',999)->select();

         $ret = $ret1->merge($ret2);

         print_r($ret);

     // pop 删除最后一个元素
     // shift 删除第一个元素
     // unshift 在开头插入一个元素

     // 也可以查询完了再筛选
         $ret = Db::table('oyk_user')->select();
         print_r($ret->where('uid',9));

     // 查询出来的数字想怎么操作都行,与数据库里面的信息无关了
     //! 14、name的参数就是表名,为什么要有table和name呢
     // name可以去掉表前缀,但是表前缀要再config里的database.php文件中配置
     // table是不能使用表前缀的
         $ret = Db::name('oyk_user')->select();
         print_r($ret);

     // 30分钟之前的时间戳
         $time = time() -30 * 60 ;
         $delete = Db::table('oyk_user')->where('last_time','<',$time)->delete();

     // 15、请求
         print_r($_GET); 

     // ThinkPHP把请求做了一个类, Request
     // 使用时,要先引用
         print_r(Request::get());
         think\Request            普通类
         think\facade\Request     门面类、静态的

         print_r(Request::param());

     // 如果有两个参数,想直接获取其中一个,直接传值即可
         $name = Request::get('name');

     // http://www.ou.com/index.php/index/two 就可以看成一个普通的接口
     // 我们要把php写成接口,然后给前端使用
     // 我们需要自己剔除非法数据

     // 使用修饰符,让id只认数字
     // d 把接收的数据转为整形
     // s 把接收的数据转为字符串
     // b 把接收的数据转为布尔值
     // a 把接收的数据转为数组
     // f 把接收的数据转为浮点型
         $post = Request::post('id/d');
         print_r($post);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七色的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值