# 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定义
- 后台使用指南
- 二次开发指南
- 官方模块手册