棕色网站设计,网站空间 云端,学校网站建设,星月教你做网站的文档where方法的用法是ThinkPHP查询语言的精髓#xff0c;也是ThinkPHP ORM的重要组成部分和亮点所在#xff0c;可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组#xff0c;虽然也可以使用对象但并不建议。字… where方法的用法是ThinkPHP查询语言的精髓也是ThinkPHP ORM的重要组成部分和亮点所在可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组虽然也可以使用对象但并不建议。 字符串条件 使用字符串条件直接查询和操作例如 $User M(User); // 实例化User对象 $User-where(type1 AND status1)-select(); 最后生成的SQL语句是 SELECT * FROM think_user WHERE type1 AND status1 如果使用3.1以上版本的话使用字符串条件的时候建议配合预处理机制确保更加安全例如 $Model-where(id%d and username%s and xx%f,array($id,$username,$xx))-select(); 或者使用 $Model-where(id%d and username%s and xx%f,$id,$username,$xx)-select(); 如果$id变量来自用户提交或者URL地址的话如果传入的是非数字类型则会强制格式化为数字格式后进行查询操作。 字符串预处理格式类型支持指定数字、字符串等具体可以参考vsprintf方法的参数说明。 数组条件 数组条件的where用法是ThinkPHP推荐的用法。 普通查询 最简单的数组查询方式如下 $User M(User); // 实例化User对象 $map[name] thinkphp; $map[status] 1; // 把查询条件传入查询方法 $User-where($map)-select(); 最后生成的SQL语句是 SELECT * FROM think_user WHERE namethinkphp AND status1 表达式查询 上面的查询条件仅仅是一个简单的相等判断可以使用查询表达式支持更多的SQL查询语法查询表达式的使用格式 $map[字段1] array(表达式,查询条件1); $map[字段2] array(表达式,查询条件2); $Model-where($map)-select(); // 也支持 表达式不分大小写支持的查询表达式有下面几种分别表示的含义是 表达式 含义 EQ 等于 NEQ 不等于 GT 大于 EGT 大于等于 LT 小于 ELT 小于等于 LIKE 模糊查询 [NOT] BETWEEN 不在区间查询 [NOT] IN 不在IN 查询 EXP 表达式查询支持SQL语法 示例如下 EQ 等于 例如 $map[id] array(eq,100); 和下面的查询等效 $map[id] 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 [NOT] LIKE 同sql的LIKE 例如 $map[name] array(like,thinkphp%); 查询条件就变成 name like thinkphp% 如果配置了DB_LIKE_FIELDS参数的话某些字段也会自动进行模糊查询。例如设置了 DB_LIKE_FIELDStitle|content 的话使用 $map[title] thinkphp; 查询条件就会变成 name like %thinkphp% 支持数组方式例如 $map[a] array(like,array(%thinkphp%,%tp),OR); $map[b] array(notlike,array(%thinkphp%,%tp),AND); 生成的查询条件就是 (a like %thinkphp% OR a like %tp) AND (b not like %thinkphp% AND b not like %tp) [NOT] BETWEEN 同sql的[not] between 查询条件支持字符串或者数组例如 $map[id] array(between,1,8); 和下面的等效 $map[id] array(between,array(1,8)); 查询条件就变成 id BETWEEN 1 AND 8 [NOT] IN 同sql的[not] in 查询条件支持字符串或者数组例如 $map[id] array(not in,1,5,8); 和下面的等效 $map[id] array(not in,array(1,5,8)); 查询条件就变成 id NOT IN (1,5, 8) EXP表达式支持更复杂的查询情况 例如 $map[id] array(in,1,3,8); 可以改成 $map[id] array(exp, IN (1,3,8) ); exp查询的条件不会被当成字符串所以后面的查询条件可以使用任何SQL支持的语法包括使用函数和字段名称。 查询表达式不仅可用于查询条件也可以用于数据更新例如 $User M(User); // 实例化User对象 // 要修改的数据对象属性赋值 $data[name] ThinkPHP; $data[score] array(exp,score1);// 用户的积分加1 $User-where(id5)-save($data); // 根据条件保存修改的数据 快捷查询 where方法支持快捷查询方式可以进一步简化查询条件的写法例如 一、实现不同字段相同的查询条件 $User M(User); // 实例化User对象 $map[name|title] thinkphp; // 把查询条件传入查询方法 $User-where($map)-select(); 查询条件就变成 name thinkphp OR title thinkphp 二、实现不同字段不同的查询条件 $User M(User); // 实例化User对象 $map[statustitle] array(1,thinkphp,_multitrue); // 把查询条件传入查询方法 $User-where($map)-select(); _multitrue必须加在数组的最后表示当前是多条件匹配这样查询条件就变成 status 1 AND title thinkphp 查询字段支持更多的例如 $map[statusscoretitle] array(1,array(gt,0),thinkphp,_multitrue); 查询条件就变成 status 1 AND score 0 AND title thinkphp 注意快捷查询方式中“|”和“”不能同时使用。 区间查询 where方法支持对某个字段的区间查询例如 $map[id] array(array(gt,1),array(lt,10)) ; 得到的查询条件是 (id 1) AND (id 10) $map[id] array(array(gt,3),array(lt,10), or) ; 得到的查询条件是 (id 3) OR (id 10) $map[id] array(array(neq,6),array(gt,3),and); 得到的查询条件是(id ! 6) AND (id 3) 最后一个可以是AND、 OR或者 XOR运算符如果不写默认是AND运算。 区间查询的条件可以支持普通查询的所有表达式也就是说类似LIKE、GT和EXP这样的表达式都可以支持。另外区间查询还可以支持更多的条件只要是针对一个字段的条件都可以写到一起例如 $map[name] array(array(like,%a%), array(like,%b%), array(like,%c%), ThinkPHP,or); 最后的查询条件是 (name LIKE %a%) OR (name LIKE %b%) OR (name LIKE %c%) OR (name ThinkPHP) 组合查询 组合查询用于复杂的查询条件如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话可以考虑使用组合查询。 组合查询的主体还是采用数组方式查询只是加入了一些特殊的查询支持包括字符串模式查询_string、复合查询_complex、请求字符串查询_query混合查询中的特殊查询每次查询只能定义一个由于采用数组的索引方式索引相同的特殊查询会被覆盖。 一、字符串模式查询采用_string 作为查询条件 数组条件还可以和字符串条件混合使用例如 $User M(User); // 实例化User对象 $map[id] array(neq,1); $map[name] ok; $map[_string] status1 AND score10; $User-where($map)-select(); 最后得到的查询条件就成了 ( id ! 1 ) AND ( name ok ) AND ( status1 AND score10 ) 二、请求字符串查询方式 请求字符串查询是一种类似于URL传参的方式可以支持简单的条件相等判断。 $map[id] array(gt,100); $map[_query] status1score100_logicor; 得到的查询条件是id100 AND (status 1 OR score 100) 三、复合查询 复合查询相当于封装了一个新的查询条件然后并入原来的查询条件之中所以可以完成比较复杂的查询条件组装。 例如 $where[name] array(like, %thinkphp%); $where[title] array(like,%thinkphp%); $where[_logic] or; $map[_complex] $where; $map[id] array(gt,1); 查询条件是 ( id 1) AND ( ( name like %thinkphp%) OR ( title like %thinkphp%) ) 复合查询使用了_complex作为子查询条件来定义配合之前的查询方式可以非常灵活的制定更加复杂的查询条件。 很多查询方式可以相互转换例如上面的查询条件可以改成 $where[id] array(gt,1); $where[_string] (name like %thinkphp%) OR ( title like %thinkphp) ; 最后生成的SQL语句是一致的。 多次调用 3.1.3版本开始where方法支持多次调用但字符串条件只能出现一次例如 $map[a] array(gt,1); $where[b] 1; $Model-where($map)-where($where)-where(status1)-select(); 多次的数组条件表达式会最终合并但字符串条件则只支持一次。 转自http://www.splaybow.com/post/thinkphp-where-function.html 转载于:https://www.cnblogs.com/lvchenfeng/p/4917901.html