首页
技术小册
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.2.3 实现模糊查询 在Web开发中,模糊查询是一种常见的需求,它允许用户通过输入部分关键字来搜索匹配的数据记录,从而在不精确知道完整信息的情况下也能找到相关结果。Yii2框架作为PHP的一个高效、安全的Web开发框架,提供了丰富的数据库操作方法,包括实现模糊查询的功能。本章节将详细介绍在Yii2中如何实现模糊查询,包括使用ActiveRecord、DbQuery以及原生SQL语句等多种方式。 #### 6.2.3.1 理解模糊查询的基本概念 模糊查询,又称作通配符查询或模式匹配查询,主要依赖于SQL中的`LIKE`操作符。`LIKE`操作符用于在`WHERE`子句中搜索列中的指定模式。在SQL中,`%`代表任意数量的字符(包括零个字符),而`_`代表一个字符。通过组合这些通配符与关键字,可以构建出灵活的搜索条件。 #### 6.2.3.2 使用ActiveRecord实现模糊查询 Yii2的ActiveRecord是ORM(对象关系映射)的一种实现方式,它允许你将数据库表映射为PHP类,并通过这些类的方法直接操作数据库。使用ActiveRecord实现模糊查询,主要是通过在查询条件中嵌入`LIKE`表达式。 ##### 示例:搜索用户表中的用户名 假设我们有一个用户表`user`,其中包含字段`username`,现在我们想搜索所有用户名中包含"john"的记录。 ```php use app\models\User; // 假设User是对应user表的ActiveRecord类 // 使用find()方法创建查询 $query = User::find(); // 添加模糊查询条件 // 注意:在Yii2中,可以使用orFilterWhere和andFilterWhere方法来处理带有通配符的模糊查询 // 这里使用andFilterWhere,表示“并且”满足条件 $query->andFilterWhere(['like', 'username', 'john']); // 执行查询并获取结果 $users = $query->all(); // 遍历结果 foreach ($users as $user) { echo $user->username . "<br>"; } ``` 在上面的例子中,`andFilterWhere`方法接收三个参数:第一个参数是条件类型(这里是`'like'`),第二个参数是字段名(这里是`'username'`),第三个参数是匹配的模式(这里是`'john'`)。Yii2会自动在`'john'`前后添加`%`通配符,形成完整的`LIKE`条件`'username' LIKE '%john%'`。 #### 6.2.3.3 使用DbQuery实现模糊查询 除了ActiveRecord,Yii2还提供了DbQuery组件,允许你以更灵活的方式构建SQL查询。当需要执行更复杂的查询或操作非ActiveRecord映射的表时,DbQuery是一个很好的选择。 ##### 示例:使用DbQuery搜索用户 ```php use Yii; use yii\db\Query; // 创建一个Query对象 $query = new Query(); // 选择`user`表 $query->select('*') ->from('user') // 添加模糊查询条件 ->where(['like', 'username', 'john']); // 执行查询并获取结果 $command = $query->createCommand(); $users = $command->queryAll(); // 遍历结果 foreach ($users as $user) { echo $user['username'] . "<br>"; } ``` 在这个例子中,我们直接通过`Query`类构建了查询,并使用了`where`方法来添加`LIKE`条件。注意,虽然这里也是`where`方法,但内部实现会根据传递的参数类型(数组且第一个元素为`'like'`)自动构建出相应的SQL条件。 #### 6.2.3.4 使用原生SQL实现模糊查询 在某些情况下,为了性能优化或执行特别复杂的查询,你可能需要直接使用原生SQL语句。Yii2提供了`createCommand`方法来允许你执行原生SQL语句。 ##### 示例:使用原生SQL搜索用户 ```php use Yii; // 构建SQL语句 $sql = "SELECT * FROM user WHERE username LIKE '%john%'"; // 创建命令并执行查询 $command = Yii::$app->db->createCommand($sql); $users = $command->queryAll(); // 遍历结果 foreach ($users as $user) { echo $user['username'] . "<br>"; } ``` 在这个例子中,我们直接构建了包含`LIKE`条件的SQL语句,并通过`createCommand`方法执行了该语句。这种方法提供了最大的灵活性,但同时也需要你手动处理SQL注入等安全问题(尽管Yii2的`createCommand`方法内部会尝试进行参数绑定以防止SQL注入)。 #### 6.2.3.5 注意事项与最佳实践 - **性能考虑**:模糊查询可能会非常慢,尤其是当它们作用于大型数据库表且没有适当的索引时。在可能的情况下,考虑使用全文搜索技术来提高性能。 - **防止SQL注入**:当使用原生SQL或构建复杂的查询时,确保使用参数绑定或Yii2的查询构建器方法来防止SQL注入攻击。 - **用户体验**:在设计模糊查询功能时,考虑用户输入的不同情况,如大小写敏感性、空格处理等,以提供一致且直观的搜索体验。 - **分页与排序**:在展示模糊查询结果时,考虑实现分页和排序功能,以便用户可以更方便地浏览大量数据。 通过掌握Yii2中实现模糊查询的多种方法,你可以灵活地构建出满足各种需求的搜索功能,提升应用的用户体验和数据检索效率。
上一篇:
6.2.2 实现范围比较查询
下一篇:
6.3 查询构建类ActiveQuery
该分类下的相关小册推荐:
PHP合辑2-高级进阶
PHP安全之道
Workerman高性能Web框架-Webman
PHP面试指南
PHP8入门与项目实战(7)
PHP8入门与项目实战(8)
Laravel(10.x)从入门到精通(十)
经典设计模式PHP版
Laravel(10.x)从入门到精通(八)
Laravel(10.x)从入门到精通(二)
Laravel(10.x)从入门到精通(三)
PHP程序员面试算法宝典