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