[php] view plain copy print? [php] view plain copy print? [php] view plain copy print? [php] view plain copy print? ...
[php] view plain copy print?
- 一、介紹
- ThinkPHP內置了非常靈活的查詢方法,可以快速的進行數據查詢操作,查詢條件可以用於讀取、更新和刪除等操作,主要涉及到where方法等連貫操作即可,無論是採用什麼資料庫,你幾乎採用一樣的查詢方法(個別資料庫例如Mongo在表達式查詢方面會有所差異),系統幫你解決了不同資料庫的差異性,因此我們把框架的這一查詢方式稱之為查詢語言。查詢語言也是ThinkPHP框架的ORM亮點,讓查詢操作更加簡單易懂。下麵來一一講解查詢語言的內涵。
- 二、查詢方式
- ThinkPHP可以支持直接使用字元串作為查詢條件,但是大多數情況推薦使用索引數組或者對象來作為查詢條件,因為會更加安全。
- 1.使用字元串作為查詢條件
- 這是最傳統的方式,但是安全性不高,例如:
- <?php
- $User = M("User"); // 實例化User對象
- $User->where('type=1 AND status=1')->select();
- ?>
- 最後生成的SQL語句是
- SELECT * FROM think_user WHERE type=1 AND status=1
- 採用字元串查詢的時候,我們可以配合使用新版提供的字元串條件的安全預處理機制,暫且不再細說。
- 2.使用數組作為查詢條件
- 這種方式是最常用的查詢方式,例如:
- <?php
- $User = M("User"); // 實例化User對象
- $condition['name'] = 'thinkphp';
- $condition['status'] = 1;
- // 把查詢條件傳入查詢方法
- $User->where($condition)->select();
- ?>
- 最後生成的SQL語句是
- SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
- 如果進行多欄位查詢,那麼欄位之間的預設邏輯關係是 邏輯與 AND,但是用下麵的規則可以更改預設的邏輯判斷,通過使用 _logic 定義查詢邏輯:
- <?php
- $User = M("User"); // 實例化User對象
- $condition['name'] = 'thinkphp';
- $condition['account'] = 'thinkphp';
- $condition['_logic'] = 'OR';
- // 把查詢條件傳入查詢方法
- $User->where($condition)->select();
- ?>
- 最後生成的SQL語句是
- SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'
- 3.使用對象方式來查詢
- 這裡以stdClass內置對象為例:
- <?php
- $User = M("User"); // 實例化User對象
- // 定義查詢條件
- $condition = new stdClass();
- $condition->name = 'thinkphp';
- $condition->status= 1;
- $User->where($condition)->select();
- ?>
- 最後生成的SQL語句和上面一樣
- SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
- 使用對象方式查詢和使用數組查詢的效果是相同的,並且是可以互換的,大多數情況下,我們建議採用數組方式更加高效。
- 三、表達式查詢
- 上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的SQL查詢語法,也是ThinkPHP查詢語言的精髓,
- 查詢表達式的使用格式:$map['欄位名'] = array('表達式','查詢條件');
- 表達式不分大小寫,支持的查詢表達式有下麵幾種,分別表示的含義是:
- EQ 等於(=)
- NEQ 不等於(<>)
- GT 大於(>)
- EGT 大於等於(>=)
- LT 小於(<)
- ELT 小於等於(<=)
- LIKE 模糊查詢
- [NOT] BETWEEN (不在)區間查詢
- [NOT] IN (不在)IN 查詢
- EXP 表達式查詢,支持SQL語法
- 示例如下:
- 1.EQ :等於(=)
- 例如:$map['id'] = array('eq',100);和下麵的查詢等效 $map['id'] = 100;表示的查詢條件就是 id = 100
- 2.NEQ: 不等於(<>)
- 例如:$map['id'] = array('neq',100);表示的查詢條件就是 id <> 100
- 3.GT:大於(>)