thinkphp的where问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp的where问题相关的知识,希望对你有一定的参考价值。

我要查询总的数据条数~要使用他内置的count()就必须用where方法~不能自己构造sql语句select * from abc where (cc=1 or cc=2) and id=$id,现在的问题是cc字段有2种可能~怎么带入到where方法里?求解

这个简单,代码如下:
$model->where(array('cc' => arra('in',array(1,2))))->count();
或者
$model->where(array('cc' => array('exp','in(1,2)')))->count();
参考技术A $abc=M('abc');
$where['cc']=array('in','1,2');
$where['id']=$id;
$count=$abc->where($where)->count();
参考技术B 算了,一看我这个就是错的,还是楼下说的好

where("(cc=1 or cc=2) and id=")这样不行么?
而且也有直接执行sql语句的方法吧

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)
xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0
exp 综合表达式 $map[‘id‘] = array(‘exp‘,‘in(1,3,8)‘); $map[‘id‘] = array(‘in‘,‘1,3,8‘);








以上是关于thinkphp的where问题的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP where方法详解

ThinkPHP3.2.3 where注入

thinkphp where里如何加两个判断条件求大神!

thinkphp5中的where写法

ThinkPHP分页实例

thinkphp 5中的混合查询