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');

 

    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'

    注意:快捷查詢方式中“|”和“&”不能同時使用。

  

  三、區間查詢

    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();

    多次的數組條件表達式會最終合併,但字符串條件則只支持一次。

 

    總結了這麼多,是不是感覺有些用法自己也用過呢?感覺寫的還可以,點個贊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章