ThinkPHP的where方法:查询界的瑞士军刀 ️

news/2025/3/21 21:59:43/文章来源:https://www.cnblogs.com/eminer/p/18785917

ThinkPHP的where方法可谓是查询语言中的“万能钥匙”,它能搞定普通查询、表达式查询、快捷查询、区间查询、组合查询等各种花式操作。参数支持字符串和数组,虽然也能用对象,但咱们还是别给自己找麻烦了吧!😉

1. 普通查询:简单粗暴,直击要害

 
$User = M("User"); // 实例化User对象
$User->where('type=1 AND status=1')->select();

这相当于SQL语句:

SELECT * FROM user WHERE type=1 AND status=1;

2. 预处理机制:安全第一,防SQL注入 🛡️

在ThinkPHP 3.1及以上版本,建议使用预处理机制,确保查询安全:

 
$Model->where("username='%s' and password='%f'", array($username, $password))->select();

或者:

 
$Model->where("username='%s' and password='%f'", $username, $password)->select();

3. 数组条件查询:优雅如诗 🎨

 
$User = M("User"); // 实例化User对象
$map['name'] = '张三';
$map['status'] = 1;
$User->where($map)->select();

这相当于SQL语句:

 
SELECT * FROM user WHERE `name`='张三' AND status=1;

4. 表达式查询:让查询更有“表达力” 🎭

$map['字段1'] = array('表达式', '查询条件1');
$map['字段2'] = array('表达式', '查询条件2');
$Model->where($map)->select();
表达式运算符大全:
SQL运算符例子实际查询条件
eq $map['id'] = array('eq', 100); id = 100
neq $map['id'] = array('neq', 100); id != 100
gt $map['id'] = array('gt', 100); id > 100
egt $map['id'] = array('egt', 100); id >= 100
lt $map['id'] = array('lt', 100); id < 100
elt $map['id'] = array('elt', 100); id <= 100
like $map['username'] = array('like', 'Admin%'); username LIKE 'Admin%'
between $map['id'] = array('between', '1,8'); id BETWEEN 1 AND 8
not between $map['id'] = array('not between', '1,8'); id NOT BETWEEN 1 AND 8
in $map['id'] = array('in', '1,5,8'); id IN (1,5,8)
not in $map['id'] = array('not in', '1,5,8'); id NOT IN (1,5,8)
and $map['id'] = array(array('gt', 1), array('lt', 10)); (id > 1) AND (id < 10)
or $map['id'] = array(array('gt', 3), array('lt', 10), 'or'); (id > 3) OR (id < 10)
xor 两个输入中只有一个是true时,结果为true,否则为false 1 XOR 1 = 0
exp $map['id'] = array('exp', 'in(1,3,8)'); id IN (1,3,8)

5. 快捷查询:懒人福音 🛋️

1. 不同字段相同查询条件
 
$User = M("User"); // 实例化User对象
$map['name|title'] = '张三';
$User->where($map)->select();

相当于SQL语句:

name = '张三' OR title = '张三'
2. 不同字段不同查询条件
$User = M("User"); // 实例化User对象
$map['status&title'] = array('1', '张三', '_multi'=>true);
$User->where($map)->select();

相当于SQL语句:

status = 1 AND title = '张三'

6. 区间查询:范围控制大师 🎯

$map['id'] = array(array('gt', 1), array('lt', 10));

相当于SQL语句:

(`id` > 1) AND (`id` < 10)

7. 组合查询:查询界的乐高积木 🧩

1. 字符串模式查询
$User = M("User"); // 实例化User对象
$map['id'] = array('neq', 1);
$map['name'] = 'ok';
$map['_string'] = 'status=1 AND score>10';
$User->where($map)->select();

相当于SQL语句:

(`id` != 1) AND (`name` = 'ok') AND (status=1 AND score>10)
2. 请求字符串查询
$map['id'] = array('gt', '100');
$map['_query'] = 'status=1&score=100&_logic=or';

相当于SQL语句:

`id` > 100 AND (`status` = '1' OR `score` = '100')

8. 复合查询:查询界的“套娃” 🪆

$where['name'] = array('like', '%张三%');
$where['title'] = array('like', '%吃饭%');
$where['_logic'] = 'or';
$map['_complex'] = $where;
$map['id'] = array('gt', 1);

相当于SQL语句:

(id > 1) AND ((name LIKE '%张三%') OR (title LIKE '%吃饭%'))

9. 多次调用where:查询界的“叠叠乐” 🏗️

$map['a'] = array('gt', 1);
$where['b'] = 1;
$Model->where($map)->where($where)->where('status=1')->select();

多次的数组条件表达式会最终合并,但字符串条件则只支持一次。


怎么样?ThinkPHP的where方法是不是让你感受到了查询的乐趣?赶紧去试试吧,让你的查询操作既安全又高效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902661.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P8436 【模板】边双连通分量

P8436 【模板】边双连通分量 题目描述 对于一个 \(n\) 个节点 \(m\) 条无向边的图,请输出其边双连通分量的个数,并且输出每个边双连通分量。 输入格式 第一行,两个整数 \(n\) 和 \(m\)。 接下来 \(m\) 行,每行两个整数 \(u, v\),表示一条无向边。 不保证图为简单图,图中可…

SvelteKit 最新中文文档教程(8)—— 部署 Node 服务端

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

第四篇:本地私有化部署大模型(Ollama、vLLM、LMDeploy)

魔塔社区平台介绍 量化:将高精度数值转换成低精度表示的过程(通常用于减少模型的内存和提高推理速度) Ollama部署大模型 linux安装miniconda# 下载 Miniconda 安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 运行安装脚本 bash…

用Adobe Illustrator编辑ArcGIS地图的方法

本文介绍在ArcGIS下属的ArcMap软件中,将绘制好的地图导出为.ai或者.eps格式文件,并在Adobe Illustrator软件中进一步编辑地图,并最终导出为图片格式的结果文件的方法~本文介绍在ArcGIS下属的ArcMap软件中,将绘制好的地图导出为.ai或者.eps格式文件,并在Adobe Illustrator软…

协议版iM蓝号检测,批量筛选iMessages数据,无痕检测是否开启iMessage服务

一、实现iMessage数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2…

记录项目调用链路

记录项目调用链路 内容 要理清项目中执行链路的调用关系,可以通过以下工具分类实现,涵盖从代码静态分析到运行时动态追踪的全链路管理:一、代码层调用关系分析 1. 静态代码分析工具PyCallGraph(Python) 生成代码调用关系图,直观展示函数调用链路。 pip install pycallgra…

部署kibana

获取kibana安装包 [root@elk1 ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.28-amd64.deb[root@elk1 ~]# ls kibana-7.17.28-amd64.deb kibana-7.17.28-amd64.deb# 安装kibana [root@elk1 ~]# dpkg -i kibana-7.17.28-amd64.deb 配置kibana [root@elk…

多线程程序设计(四)——Balking

本文摘要了《Java多线程设计模式》一书中提及的 Balking 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当线程访问的共享数据没有准备好时,就放弃后续的操作。 ◆ 解决方案 在临界区中判断共享…

A preLaunchTaskC/C++:g++.exe 生成活动文件已终止,退出代码为1。找到一个有点呆的bug

之前突然弹出这个问题,百思不得其解,今天突然发现,因为之前顺便命名了一个c++文件用来暂时装代码的,名字叫做a.cpp,编译器编译的过程中会生成一个可执行文件叫做a.exe,就冲突了,太傻了:-(

2025/3/21 【二叉树】二叉树理论基础节笔记

代码随想录 解题过程中二叉树主要有两种形式: 1. 满二叉树2. 完全二叉树 优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。 二、二叉搜索树 三、平衡二叉搜索树

C语言程序实验二

实验任务1:#include <stdio.h> #include <stdlib.h> #include <time.h>#define N 5int main() {int number;int i;srand(time(0));for(i = 0; i<N; ++i){number = rand()%100 +1;printf("20490042%04d\n", number);}return 0;} 问题1:生成一…

智慧工地合规穿戴监测系统

智慧工地合规穿戴监测系统基于计算机视觉的未佩戴安全帽检测算法通过实时视频流分析,可突破人工监管的物理局限,实现724小时全场景覆盖。该技术通过深度学习模型对人体姿态、头部特征进行精准识别,快速定位违规行为,为安全监管提供数据化、智能化的升级路径。核心算法模型采…