# WHERE
where方法的用法是ThinkPHP查詢語言的精髓,也是ThinkPHP ORM的重要組成部分和亮點所在,可以完成包括普通查詢、表達式查詢、快捷查詢、區間查詢、組合查詢在內的查詢操作。where方法的參數支持字符串和數組,雖然也可以使用對象但并不建議。
## 字符串條件
使用字符串條件直接查詢和操作,例如:
```php
$User = M("User"); // 實例化User對象
$User->where('type=1 AND status=1')->select();
```
最后生成的SQL語句是
```php
SELECT * FROM think_user WHERE type=1 AND status=1
```
使用字符串條件的時候,建議配合預處理機制,確保更加安全,例如:
```php
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
```
或者使用:
```php
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
```
如果$id變量來自用戶提交或者URL地址的話,如果傳入的是非數字類型,則會強制格式化為數字格式后進行查詢操作。
字符串預處理格式類型支持指定數字、字符串等,具體可以參考vsprintf方法的參數說明。
## 數組條件
數組條件的where用法是ThinkPHP推薦的用法。
## 普通查詢
最簡單的數組查詢方式如下:
```php
$User = M("User"); // 實例化User對象
$map['name'] = 'thinkphp';
$map['status'] = 1;
// 把查詢條件傳入查詢方法
$User->where($map)->select();
```
最后生成的SQL語句是
```php
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
```
## 表達式查詢
上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的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語法|
## 多次調用
where方法支持多次調用,但字符串條件只能出現一次,例如:
```php
$map['a'] = array('gt',1);
$where['b'] = 1;
$Model->where($map)->where($where)->where('status=1')->select();
```
多次的數組條件表達式會最終合并,但字符串條件則只支持一次。
更多的查詢用法,可以參考查詢語言部分。
- 前言
- 基礎
- 關于MuuCmf
- 獲取MuuCmf
- 環境要求
- 目錄結構
- 安裝
- 開發規范
- 控制器
- 控制器定義
- 前置和后置操作
- AJAX返回
- Action參數綁定
- 偽靜態
- URL大小寫
- Url生成
- 跳轉和重定向
- 輸入變量
- 請求類型
- 空操作
- 空控制器
- 插件控制器
- 操作綁定到類
- 模型
- 模型的定義
- 模型實例化
- 字段定義
- 連接數據庫
- 切換數據庫
- 分布式數據庫支持
- 連貫操作
- WHERE
- TABLE
- ALIAS
- DATA
- FIELD
- ORDER
- LIMIT
- PAGE
- GROUP
- HAVING
- JOIN
- UNION
- DISTINCT
- LOCK
- CACHE
- COMMENT
- RELATION
- USING
- fetchSql
- TOKEN
- STRICT
- INDEX
- 命名范圍
- CURD操作
- 數據創建
- 數據寫入
- 數據讀取
- 數據更新
- 數據刪除
- ActiveRecord
- 字段映射
- 查詢語言
- 查詢方式
- 表達式查詢
- 快捷查詢
- 區間查詢
- 組合查詢
- 統計查詢
- SQL查詢
- 動態查詢
- 子查詢
- 自動驗證
- 自動完成
- 參數綁定
- 虛擬模型
- 模型分層
- 視圖模型
- 關聯模型
- 高級模型
- Mongo模型
- 視圖
- 模板定義
- 模板主題
- 模板賦值
- 模板渲染
- 獲取模板地址
- 獲取內容
- 模板引擎
- 模板
- 變量輸出
- 系統變量
- 使用函數
- 默認值輸出
- 使用運算符
- 標簽庫
- 模板繼承
- 修改定界符
- 三元運算
- 包含文件
- 內置標簽
- Volist標簽
- Foreach標簽
- For標簽
- Switch標簽
- 比較標簽
- 范圍判斷標簽
- IF標簽
- Present標簽
- Empty標簽
- Defined標簽
- Assign標簽
- Define標簽
- 標簽嵌套
- import標簽
- 使用PHP代碼
- 原樣輸出
- 模板注釋
- 模板布局
- 模板替換
- 模塊開發
- 模塊的定義
- 開發規范
- 后臺構建器Builder
- 安裝與卸載
- 插件開發
- REST API
- RESTAPI定義
- 后臺使用指南
- 二次開發指南
- 官方模塊手冊