thinkphp的where⽅法的使⽤
1.Thinkphp中where()条件的使⽤
  总是有⼈觉得,thinkphp的where()就是写我要进⾏增加、查询、修改、删除数据的条件,很简单的,其实我想告诉你,where()是写条件语句的,但是他很不简单,严密的条件语句,可以有效的防⽌sql注⼊,也可以加强sql语句的严密性,也有利于进⾏搜索查询
  1.1查询⽅法分类
  where⽅法的⽤法是ThinkPHP查询语⾔的精髓,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where⽅法的参数⽀持字符串和数组,虽然也可以使⽤对象但并不建议。
  1.1.1字符串条件
  使⽤字符串条件直接查询和操作(TP框架控制器中的条件语句可以在/Runtime/Logs/..⾥⾯到,可以对⽐)
  例:
       $User = M("User"); // 实例化User对象
       $User->where('type=1 AND status=1')->select();
  ⽣成sql语句:SELECT * FROM user WHERE type=1 AND status=1;
  在TP版本3.1以上时,建议配合预处理机制,确保更加安全,可以有效的防sql注⼊
    $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();
  1.1.2数组条件
  最简单的数组条件查询:
  $User = M("User"); // 实例化User对象
$map['name'] = 'thinkphp';
$map['status'] = 1;
/
/ 把查询条件传⼊查询⽅法
$User->where($map)->select();
  ⽣成的SQL语句:SELECT * FROM user WHERE `name`='thinkphp' AND status=1
  1.1.3表达式查询
  $map['字段1']  = array('表达式','查询条件1');
$map['字段2']  = array('表达式','查询条件2');
$Model->where($map)->select();
  1.1.4表达式中运算符条件的查询
  TP运算符
SQL运算符例⼦实际查询条件
eq=$map['id'] = array('eq',100);等效于:$map['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 like$map<'username'> = array('like','Admin%');username like 'Admin%' between between and$map['id'] = array('between','1,8');id BETWEEN 1 AND 8
not between not between and$map['id'] = array('not between','1,8');id NOT BETWEEN 1 AND 8
in in$map['id'] = array('in','1,5,8');id in(1,5,8)
not in not in$map['id'] = array('not in','1,5,8');id not in(1,5,8)
and(默认)and$map['id'] = array(array('gt',1),array('lt',10));(id > 1) AND (id < 10)
or or$map['id'] = array(array('gt',3),array('lt',10), 'or');(id > 3) OR (id < 10)
1 xor 1 = 0
xor(异或)xor两个输⼊中只有⼀个是true时,结果为true,否则为false,例
⼦略。
exp综合表达式$map['id'] = array('exp','in(1,3,8)');$map['id'] = array('in','1,3,8');
    exp 不是⼀个运算符,⽽是⼀个综合表达式以⽀持更复杂的条件设置。exp 的操作条件不会被当成字符串,可以使⽤任何 SQL ⽀持的语法,包括使⽤函数和字段名称。
    1.1.5快捷查询
  ⼀、实现不同字段相同的查询条件
  $User = M("User"); // 实例化User对象
$map['name|title'] = 'thinkphp';
// 把查询条件传⼊查询⽅法
$User->where($map)->select();
  查询条件就变成 name= 'thinkphp' OR title = 'thinkphp',是不是很强⼤
  ⼆、实现不同字段不同的查询条件
  $User = M("User"); // 实例化User对象
$map['status&title'] =array('1','thinkphp','_multi'=>true);
// 把查询条件传⼊查询⽅法
$User->where($map)->select();
  '_multi'=>true必须加在数组的最后,表⽰当前是多条件匹配,这样查询条件就变成status= 1 AND title = 'thinkphp' ,查询字段还能⽀持更多。
  例:$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);
    查询条件就变成 status= 1 AND score >0 AND title = 'thinkphp'
php实例化后获取子类名称    注意:快捷查询⽅式中“|”和“&”不能同时使⽤。
  三、区间查询
    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)
    区间查询的条件可以⽀持普通查询的所有表达式,也就是说类似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')
    1.1.6组合查询(这是项⽬中最常⽤到,并且很重要的⼀个查询⽅式)
    ⼀、字符串模式查询(采⽤_string 作为查询条件)
    数组条件还可以和字符串条件混合使⽤,例如:
  $User = M("User"); // 实例化User对象
  $map['id'] = array('neq',1);
  $map['name'] = 'ok';
  $map['_string'] = 'status=1 AND score>10';
  $User->where($map)->select();
    最后得到的查询条件就成了:( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )
    ⼆、请求字符串查询⽅式
    请求字符串查询是⼀种类似于URL传参的⽅式,可以⽀持简单的条件相等判断。
    $map['id'] = array('gt','100');
    $map['_query'] = 'status=1&score=100&_logic=or';
       得到的查询条件是:`id`>100 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()条件的使⽤快没有问题了)
    1.1.7多次调⽤
    where⽅法⽀持多次调⽤,但字符串条件只能出现⼀次。
    $map['a'] = array('gt',1);
    $where['b'] = 1;
    $Model->where($map)->where($where)->where('status=1')->select();
    多次的数组条件表达式会最终合并,但字符串条件则只⽀持⼀次。
    总结了这么多,是不是感觉有些⽤法⾃⼰也⽤过呢?感觉写的还可以,点个赞

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。