当前位置: 首页 > news >正文

php 对象集合 查询,ThinkPHP5.1:数组对象查询的使用

be1623237a0ba795463467849af41b26.png

用过5.0的开发者都比较依赖5.0的数组查询方式,但是很无奈5.1的数组查询方式和5.0的区别很大,因此经常听到开发者抱怨5.1的数组查询不好用。首先,出于安全和易用性的原因,官方是不推荐使用数组查询条件的,其次,你也许不知道5.1版本其实提供了一个新的数组对象查询的方式用以替代之前的数组条件。

如果你的版本是V5.1.21+的话,那么可以尝试下面提到的数组对象查询方式,一定会有意外的惊喜^_^

对于习惯或者重度依赖数组查询条件的用户来说,可以选择数组对象查询,该对象完成了普通数组方式查询和系统的查询表达式之间的桥接,但相较于系统推荐的查询表达式方式而言,需要注意变量的安全性,避免产生SQL注入的情况。

要使用数组对象查询,你首先需要引入think\db\Where类。use think\db\Where;

Where对象的用法一般有两种,第一种最简单,你依然和5.0一样使用数组条件进行定义查询条件,例如:$map = [

'name' => ['like', 'thinkphp%'],

'title' => ['like', '%think%'],

'id' => ['>', 10],

'status' => 1,

];

然后,在实际使用where方法的时候改为Db::name('user')

->where(new Where($map))

->select();

生成的SQL是:SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%think%' AND `id` > 10 AND `status` =1

这种方式最容易改造,相当于一键切换到5.0的数组查询方式。当然,除了Db查询之外,模型查询也一样可以支持。

第二种方式是,直接实例化一个Where对象,然后在where方法查询的时候直接传入该Where对象实例。$where = new Where;

$where['id'] = ['in', [1, 2, 3]];

$where['title'] = ['like', '%php%'];

Db::name('user')

->where($where)

->select();Where对象实现了ArrayAccess接口,因此可以直接当成数组来赋值。

生成的SQL是:SELECT * FROM `think_user` WHERE `id` IN (1,2,3) AND `title` LIKE '%php%'

使用Where对象查询可以和其它的查询方式混合使用。如果你在混合使用数组查询对象的时候,希望某个数组查询对象的查询条件加上括号,可以使用$where = new Where;

$where['id'] = ['in', [1, 2, 3]];

$where['title'] = ['like', '%php%'];

Db::name('user')

->where($where->enclose())

->where('status', 1)

->select();

生成的SQL是:SELECT * FROM `think_user` WHERE ( `id` IN (1,2,3) AND `title` LIKE '%php%' ) AND `status` =1

enclose方法表示该查询条件两边会加上括号包起来。

使用数组对象查询的情况请一定要注意做好数据类型检查,尽量避免让用户决定你的数据,从而导致SQL注入的可能。

PHP中文网,有大量免费的ThinkPHP入门教程,欢迎大家学习!

本文转自:https://blog.thinkphp.cn/778497

相关文章:

  • php5.1.4,apache2.2.2+php5.1.4+my5.0
  • php x63 157 162,php – 这个代码是漏洞吗?这段代码是什么?
  • event类型 php,系统文件说明c_system_event.php事件相关函数的函数说明列表
  • matlab remez函数作用,remez函数怎么用 MATLAB中remezord的功能,格式,说明,举例设计一个滤波器?...
  • ema matlab实现,用vba实现EMA函数
  • centos上mysql乱码6,centos6.5和centos7.5统一字符集为zh_CN.UTF-8解决系统和MySQL数据库乱码问题...
  • php odbc 中文,ODBC - [ php中文手册 ] - 在线原生手册 - php中文网
  • matlab频率采样法设计FIR滤波器,用频率采样法设计FIR滤波器
  • php 单独验证码可以显示_但调用验证码时无法显示,ThinkPHP(SAE)调用验证码不能正确调用验证码...
  • php中转源码,PHP 转 ASCII
  • php+5+windows,PHP5终极安装——PHP5+IIS5+Windows2000Server
  • php网站目录禁止访问,禁止访问Apache目录
  • php上传打包下载,php在线打包下载
  • 52进制 java,Java实现的26进制转换
  • php自我介绍50字,简短自我介绍50字
  • 4. 路由到控制器 - Laravel从零开始教程
  • C++11: atomic 头文件
  • Consul Config 使用Git做版本控制的实现
  • dva中组件的懒加载
  • ES6之路之模块详解
  • Go 语言编译器的 //go: 详解
  • Hibernate【inverse和cascade属性】知识要点
  • linux安装openssl、swoole等扩展的具体步骤
  • Netty 4.1 源代码学习:线程模型
  • Netty源码解析1-Buffer
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • vue:响应原理
  • 阿里云购买磁盘后挂载
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 今年的LC3大会没了?
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微服务核心架构梳理
  • 小程序测试方案初探
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 智能合约Solidity教程-事件和日志(一)
  • HanLP分词命名实体提取详解
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #AngularJS#$sce.trustAsResourceUrl
  • #DBA杂记1
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (06)Hive——正则表达式
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (定时器/计数器)中断系统(详解与使用)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (九)One-Wire总线-DS18B20
  • (转)memcache、redis缓存
  • (转)setTimeout 和 setInterval 的区别