博客列表 >thinkPHP 数据库高级查询及数据请求

thinkPHP 数据库高级查询及数据请求

吴长清
吴长清原创
2022年08月30日 10:42:38665浏览

1.数据库高级查询

1.1 where 条件查询(符号)

  1. // 1.where 条件查询 = > < >= <= <>
  2. // 1.1 = 等于
  3. $res = Db::table('user')->where('id', '=', 2)->select();
  4. print_r($res);
  5. // 1.2 > 大于
  6. $res = Db::table('user')->where('id', '>', 2)->select();
  7. print_r($res);
  8. // 1.3 < 小于
  9. $res = Db::table('user')->where('id', '<', 2)->select();
  10. print_r($res);
  11. // 1.4 >= 大于等于
  12. $res = Db::table('user')->where('id', '>=', 2)->select();
  13. print_r($res);
  14. // 1.5 <= 小于等于
  15. $res = Db::table('user')->where('id', '<=', 2)->select();
  16. print_r($res);
  17. // 1.6 <> 不等于
  18. $res = Db::table('user')->where('id', '<>', 2)->select();
  19. print_r($res);

1.2 模糊查询和模糊取反

  1. // 2.模糊查询和模糊取反
  2. // 2.1 模糊查询 like
  3. $ret = Db::table('user')->where('name', 'like', '%于%')->select();
  4. print_r($ret);
  5. // 2.1 模糊查询取反 notlike
  6. $ret = Db::table('user')->where('name', 'notlike', '%于%')->select();
  7. print_r($ret);

1.3 区间查询和区间取反

  1. // 3.区间查询和区间取反
  2. // 3.1 区间查询 between
  3. $ret = Db::table('user')->where('id', 'between', '2,8')->select();
  4. print_r($ret);
  5. // 3.2 区间去反查询 notbetween
  6. $ret = Db::table('user')->where('id', 'notbetween', '2,8')->select();
  7. print_r($ret);

1.4 指定查询和指定取反

  1. // 4.指定查询和指定取反
  2. // 4.1 指定查询 in
  3. $ret = Db::table('user')->where('id', 'in', '2,8,15')->select();
  4. print_r($ret);
  5. // 4.2 指定取反查询 notin
  6. $ret = Db::table('user')->where('id', 'notin', '2,8,15')->select();
  7. print_r($ret);

1.5 返回要查询的字段 field

  1. // 5.返回要查询的字段field
  2. // 使用关联数组的话 相当于起别名 类似mysql中的as
  3. $arr=[
  4. 'id'=>'xuhao',
  5. 'name'=>'xingmin'
  6. ];
  7. $ret = Db::table('user')->field($arr)->where('id', 'in', '2,8,15')->select();
  8. print_r($ret);

1.6 返回不需要查询的字段 withoutField

  1. // 6. 返回不需要查询的字段 withoutField
  2. $arr = [
  3. 'password', 'add_time', 'last_time', 'status'
  4. ];
  5. $ret = Db::table('user')->withoutField($arr)->where('id', 'in', '2,8,15')->select();
  6. print_r($ret);

1.7 排序查询 order

  1. // 7.排序查询 order
  2. // 关键字 DESC:降序 ASC:升序
  3. $ret = Db::table('user')->order('add_time','DESC')->order('id','DESC')->select();
  4. print_r($ret);

1.8 getLastSql()和fetchSql()

  1. // 8.getLastSql()和fetchSql()
  2. // 8.1 getLastSql()返回最后执行的sql语句
  3. echo Db::getLastSql();
  4. // 8.2 fetchSql() 返回当前执行的sql语句
  5. $ret = Db::table('user')->order('add_time', 'DESC')->order('id', 'DESC')->fetchSql()->select();
  6. print_r($ret);

1.9 条件查询and和or

  1. // 9.条件查询and和or
  2. // 9.1 and:两个以上的where链式操作 表示and
  3. // 返回满足两个条件的数据
  4. $ret = Db::table('user')->where('id', '=', 2)->where('name', '=', '米粒')->select();
  5. print_r($ret);
  6. // 9.2 or:一个以上的whereOr链式操作 表示or
  7. // 返回满足其中一个条件的数据
  8. $ret = Db::table('user')->where('id', '=', 1)->whereOr('name', '=', '米粒')->select();
  9. print_r($ret);

1.10 分页查询

  1. // 10.分页查询 在做分页查询的时候建议使用page()方法
  2. // 10.1 limit() 参数1:从第几条开始 参数2:条数
  3. // 从索引为5的数据为起点 向后查询5条数据
  4. $ret = Db::table('user')->limit(5, 5)->select();
  5. print_r($ret);
  6. // 10.2 page() 参数1:第几页 参数2:条数
  7. // 查询第二页的5条数据
  8. $ret = Db::table('user')->limit(2, 5)->select();
  9. print_r($ret);

1.11 聚合查询

  1. // 11.聚合查询
  2. // 11.1 count() 统计user表有多少条数据
  3. $ret = Db::table('user')->count();
  4. print_r($ret);
  5. // 11.2 min()最小值 查询最小的id
  6. $ret = Db::table('user')->min('id');
  7. print_r($ret);
  8. // 11.3 max()最大值 查询最大的id
  9. $ret = Db::table('user')->max('id');
  10. print_r($ret);

1.12 数据处理

1.13 多库查询

  • 配置database.php文件
    • connections 内添加数据源,其中mysql时默认的 test是新增的数据源,需要在database指定test数据库
  1. // 数据库连接配置信息
  2. 'connections' => [
  3. //默认数据源
  4. 'mysql' => [
  5. // 数据库类型
  6. 'type' => env('database.type', 'mysql'),
  7. // 服务器地址
  8. 'hostname' => env('database.hostname', '127.0.0.1'),
  9. // 数据库名
  10. 'database' => env('database.database', 'tpstudy'),
  11. // 用户名
  12. 'username' => env('database.username', 'root'),
  13. // 密码
  14. 'password' => env('database.password', 'root'),
  15. // 端口
  16. 'hostport' => env('database.hostport', '3306'),
  17. // 数据库连接参数
  18. 'params' => [],
  19. // 数据库编码默认采用utf8
  20. 'charset' => env('database.charset', 'utf8'),
  21. // 数据库表前缀
  22. 'prefix' => env('database.prefix', ''),
  23. // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
  24. 'deploy' => 0,
  25. // 数据库读写是否分离 主从式有效
  26. 'rw_separate' => false,
  27. // 读写分离后 主服务器数量
  28. 'master_num' => 1,
  29. // 指定从服务器序号
  30. 'slave_no' => '',
  31. // 是否严格检查字段是否存在
  32. 'fields_strict' => true,
  33. // 是否需要断线重连
  34. 'break_reconnect' => false,
  35. // 监听SQL
  36. 'trigger_sql' => env('app_debug', true),
  37. // 开启字段缓存
  38. 'fields_cache' => false,
  39. ],
  40. // 更多的数据库配置信息
  41. // 添加test数据源
  42. 'test' => [
  43. // 数据库类型
  44. 'type' => env('database.type', 'mysql'),
  45. // 服务器地址
  46. 'hostname' => env('database.hostname', '127.0.0.1'),
  47. // 数据库名 指定为test
  48. 'database' => env('database.database', 'test'),
  49. // 用户名
  50. 'username' => env('database.username', 'root'),
  51. // 密码
  52. 'password' => env('database.password', 'root'),
  53. // 端口
  54. 'hostport' => env('database.hostport', '3306'),
  55. // 数据库连接参数
  56. 'params' => [],
  57. // 数据库编码默认采用utf8
  58. 'charset' => env('database.charset', 'utf8'),
  59. // 数据库表前缀
  60. 'prefix' => env('database.prefix', ''),
  61. // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
  62. 'deploy' => 0,
  63. // 数据库读写是否分离 主从式有效
  64. 'rw_separate' => false,
  65. // 读写分离后 主服务器数量
  66. 'master_num' => 1,
  67. // 指定从服务器序号
  68. 'slave_no' => '',
  69. // 是否严格检查字段是否存在
  70. 'fields_strict' => true,
  71. // 是否需要断线重连
  72. 'break_reconnect' => false,
  73. // 监听SQL
  74. 'trigger_sql' => env('app_debug', true),
  75. // 开启字段缓存
  76. 'fields_cache' => false,
  77. ],
  78. ],
  • 访问test数据库中user表内的数据
  1. $ret = Db::connect('test')->table('user')->select();
  2. print_r($ret);

1.14 name和table的区别

  • name 如果在database.php中配置内表前缀,在查询的时候可以省略表名称的前缀直接查询
  • table 无论是否配置表前缀,在查询的时候都需要完整的表名称

2.数据请求Request

  1. // 引入Request静态类
  2. use think\facade\Request;

2.1 GET请求

  1. // 1.获取get请求数据
  2. print_r(Request::get());
  3. echo '<br>';
  4. // 2.获取get请求数据的某一个值
  5. print_r(Request::get('name'));
  6. echo '<br>';

2.2 POST请求

  • 使用apipost模拟post请求

    1. // 1.获取post请求数据
    2. print_r(Request::post());
    3. // 2.获取post请求数据的某一个值
    4. print_r(Request::post('username'));

  • apipost下载地址: https://www.apipost.cn/?utm_source=10120

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议