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

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方法是不是让你感受到了查询的乐趣?赶紧去试试吧,让你的查询操作既安全又高效

posted @ 2025-03-21 21:57  网风笔记开发者  阅读(42)  评论(0)    收藏  举报