首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 PHP语言发展历史及其适合的应用领域
1.2 什么是框架
1.3 为什么要用框架开发
1.4 自定义框架
1.4.1 MVC框架模式的实现
1.4.2 入口文件
1.4.3 应用(前端控制器)
1.4.4 从自定义框架到Yii2框架
2.1 Yii简介
2.1.1 什么是Yii框架技术
2.1.2 Yii2的优点
2.1.3 应用案例
2.2 下载Yii2
2.3 运行应用
2.4 输出“Hello World”
2.5 入口文件
2.6 应用主体
2.7 MVC框架模式
2.8 Yii2框架中的控制器
2.9 Yii2框架中的视图
2.10 项目实现迭代一:渲染首页、列表页和内容页视图
3.1 布局概述
3.2 项目实现迭代二:创建并使用布局渲染首页视图
3.3 Controller类的render()方法执行流程
3.4 应用级布局
3.5 嵌套布局
3.6 项目实现迭代三:使用嵌套布局渲染“新闻中心”列表页
3.7 视图文件的存储路径
4.1 模块概述
4.2 使用Gii创建模块
4.3 模块中的资源文件
4.4 项目实现迭代四:文章管理
5.1 ActiveRecord模型概述
5.2 通过CRUD(增查改删)操作理解ActiveRecord类
5.2.1 文章表(ds_article)
5.2.2 在配置文件中初始化数据库连接
5.2.3 创建ActiveRecord模型
5.2.4 通过查询操作理解ActiveRecord类
5.2.5 通过插入和更新操作理解ActiveRecord类
5.2.6 通过删除操作理解ActiveRecord类
5.3 项目实现迭代五:首页“行业百科”数据查询
5.4 项目实现迭代六:在“文章添加”页面实现数据插入
6.1 ActiveRecord模型类的find()方法与查询执行流程
6.2 查询方法find()实例
6.2.1 实现带有逻辑运算符和比较运算符的查询
6.2.2 实现范围比较查询
6.2.3 实现模糊查询
6.3 查询构建类ActiveQuery
6.3.1 ActiveQuery成员属性简介
6.3.2 ActiveQuery成员方法简介
6.3.3 Query类where()成员方法简介
6.4 关联查询
6.5 项目实现迭代七:完成首页中的数据填充
6.5.1 实现幻灯片切换
6.5.2 实现成功案例
6.5.3 实现其他栏目的文章内容查询
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(上)
小册名称:Yii2框架从入门到精通(上)
### 6.3.3 Query类where()成员方法简介 在Yii2框架中,`Query`类作为数据库查询构建器的核心,提供了丰富的API来构建复杂的SQL查询语句,极大地简化了数据库操作的过程。其中,`where()`方法是`Query`类中至关重要的一个成员方法,它用于指定查询的WHERE条件部分,使得开发者能够灵活地根据业务需求筛选出所需的数据。本章节将深入介绍`where()`方法的使用方式、参数格式、高级技巧以及在实际开发中的应用场景。 #### 一、基本用法 `where()`方法的基本作用是添加一个或多个WHERE条件到查询中。这些条件可以是字符串、数组或者`Expression`对象,Yii2会根据传入的参数类型自动进行解析并构建出相应的SQL语句。 ##### 1. 字符串条件 当使用字符串作为`where()`方法的参数时,你需要直接编写SQL条件语句(但通常不推荐这种方式,因为它可能导致SQL注入的风险,除非你完全确信字符串内容是安全的)。 ```php $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where('status = 1 AND age > 30'); ``` ##### 2. 数组条件 数组是`where()`方法最常用的一种参数格式,它提供了更高的灵活性和安全性。Yii2支持多种数组格式的WHERE条件: - **简单条件数组**:每个元素是一个包含键(列名)和值(列值)的关联数组,用于构建`列名 = 值`的等值条件。 ```php $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where([ 'status' => 1, 'age' => 30, ]); ``` 这会被解析为`WHERE status = 1 AND age = 30`。 - **操作符条件数组**:数组的键是列名,值是一个包含操作符和值的数组,用于构建非等值条件。 ```php $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where([ '>', 'age', 30, 'LIKE', 'username', 'admin%', ]); ``` 这会被解析为`WHERE age > 30 AND username LIKE 'admin%'`。 - **混合条件数组**:你可以将简单条件数组和操作符条件数组混合使用,以满足更复杂的查询需求。 ```php $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where([ 'status' => 1, ['>', 'age', 30], ['or', ['like', 'username', 'john'], ['like', 'username', 'doe'], ], ]); ``` #### 二、高级用法 ##### 1. 使用参数绑定 为了避免SQL注入,Yii2推荐使用参数绑定来传递动态值给`where()`方法。参数绑定通过为数组条件的值指定为占位符(如`:name`),然后在查询执行时提供这些占位符的实际值来完成。 ```php $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where(['username' => ':name', 'status' => ':status']) ->addParams([':name' => 'john', ':status' => 1]); ``` 注意:在直接使用数组条件时,Yii2通常会自动处理参数绑定,但明确指定占位符和参数可以提高代码的可读性和灵活性。 ##### 2. 动态构建条件 在实际开发中,查询条件往往需要根据用户输入或其他业务逻辑动态构建。Yii2提供了灵活的方式来动态添加或修改WHERE条件。 ```php $conditions = ['status' => 1]; if ($age > 0) { $conditions['age'] = $age; } $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where($conditions); ``` 或者,使用`andWhere()`和`orWhere()`方法来在现有条件基础上添加新的条件,而不覆盖它们。 ##### 3. 复杂条件组合 Yii2允许你通过嵌套数组和特殊操作符(如`and`、`or`)来构建极其复杂的WHERE条件组合。 ```php $query = (new \yii\db\Query()) ->select('*') ->from('user') ->where([ 'or', ['and', ['status' => 1], ['>', 'age', 30], ], ['like', 'username', 'admin%'], ]); ``` 这将被解析为`WHERE (status = 1 AND age > 30) OR username LIKE 'admin%'`。 #### 三、应用场景 `where()`方法几乎涉及到所有需要数据筛选的数据库操作场景,包括但不限于: - **用户权限验证**:根据用户角色或状态筛选数据。 - **分页查询**:在分页时根据页码和每页条数动态构建查询条件。 - **搜索功能**:根据用户输入的关键词构建模糊查询条件。 - **数据报表**:根据时间范围、部门等条件统计数据。 #### 四、总结 `where()`方法是Yii2框架中`Query`类用于构建WHERE条件的核心成员方法,它通过灵活多样的参数格式和高级特性,为开发者提供了强大的数据筛选能力。在实际开发中,熟练掌握`where()`方法的使用,不仅能够提高开发效率,还能有效避免SQL注入等安全风险。通过本文的介绍,希望读者能够深入理解`where()`方法的用法和技巧,并在实际项目中灵活运用。
上一篇:
6.3.2 ActiveQuery成员方法简介
下一篇:
6.4 关联查询
该分类下的相关小册推荐:
PHP合辑2-高级进阶
Swoole入门教程
Shopify应用实战开发
全栈工程师修炼指南
PHP安全之道
Magento零基础到架构师(产品管理)
PHP8入门与项目实战(8)
PHP合辑1-基础入门
Laravel(10.x)从入门到精通(六)
Laravel(10.x)从入门到精通(三)
Laravel(10.x)从入门到精通(十九)
Magento零基础到架构师(系统管理)