美文网首页
Yii框架操作数据库的几种方式

Yii框架操作数据库的几种方式

作者: duandaoke | 来源:发表于2018-02-17 15:52 被阅读0次

来自:http://www.yiichina.com/topic/6570

一、Yii操作数据库的几种选择

1 PDO方式(适合多表连接查询)。

$sql = "";//原生态sql语句 
xx::model()->dbConnection->createCommand($sql)->execute();  非select语句(update、insert、delete)
xx::model()->dbConnection->createCommand($sql)->queryRow(); 查询select一条记录
xx::model()->dbConnection->createCommand($sql)->queryAll(); 查询select多条记录


$sql = "select a.*, count(b.role_id)as num from {{user_role}} a left join {{user}} b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

比如

$sql = "select a.*, count(b.role_id)as num from slgo_user_role a left join slgo_user b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

2 Active Record方式

(1)New

$post=new Post; 
$post->title='sample post'; 
$post->content='post body content'; 
$post->save(); 

(2)Criteria方式
也可以使用 $condition 指定更复杂的查询条件。 不使用字符串, 我们可以让 $condition 成为一个 CDbCriteria 的实例,
它允许我们指定不限于 WHERE 的条件。

$criteria=new CDbCriteria; 
$criteria->select='title';  // 只选择 'title' 列 
$criteria->condition='postID=:postID'; 
$criteria->params=array(':postID'=>10); 
$post=Post::model()->find($criteria); 

一种替代 CDbCriteria 的方法是给 find 方法传递一个数组。 数组的键和值各自对应标准(criterion)的属性名和值,
上面的例子可以重 写为如下:

$post=Post::model()->find(array( 
    'select'=>'title', 
    'condition'=>'postID=:postID', 
    'params'=>array(':postID'=>10), 
)); 

当一个查询条件是关于按指定的值匹配几个列时, 我们可以使用 findByAttributes()。我们使 $attributes 参数是一个以列名做索引的值的数组。
在一些框架中, 此任务可以通过调用类似findByNameAndTitle的方法实现。
虽然此方法看起来很诱人, 但它常常引起混淆, 冲突 和比如列名大小写敏感的问题。

3 Query Builder 方式

$user = Yii::app()->db->createCommand() 
    ->select('id, username, profile') 
    ->from('tbl_user u') 
    ->join('tbl_profile p', 'u.id=p.user_id') 
    ->where('id=:id', array(':id'=>$id)) 
    ->queryRow(); 

二、Yii操作数据库的几种选择与mysql_escape_string方法

mysql_escape_string是转义sql中的特殊字符。

1 创建记录时

当直接执行sql时, 需要加mysql_escape_string方法。
当使用yii框架式, 不需要加(因为Yii已经添加验证)。

2 查询记录时

当直接执行sql时, 需要加mysql_escape_string方法。
当使用yii框架式, 如果在find中直接拼接sql, 则也需要添加, 如果使用param数组方式, 不需要加(因为Yii已经添加验证)。

连接数据库的两种方法:

Yii::app()->createCommand($sql)->queryAll();
xxx::model()->dbConnection->createCommand($sql)->queryAll();

三种操作数据库的方式优缺点对比

一、在用好AcitveRecord的情况下,即不要让其生成比较二的SQL查询方式,我的经验,不必过分在意那点时间性能上的区别的。对于大数据查询,内存空间上的话,在yii2中可以使用 toArray() 来节省内存消耗。

二、ActiveRecord之于PDO的长处在于其方便。

一个是相比于书写SQL语句,用ActiveRecord要简单一点,更重要的是不容易出错。

二是提供了许多SQL语句之外的便利,比如参数过滤、绑定等等。这个web开发中你总要遇到吧,一个SQL语句一个SQL语句的写,代码复用程度不高不说,还容易某个地方忘记过滤了,形成安全隐患。

三、 Yii2中已经有Query,性能上优于ActiveRecord,可以作为替代。当然,方便与效率是硬币的两面,其使用上不如ActiveRecord 方便。但在项目中我的经验是Query的使用频率仅略少于ActiveRecord,个人认为Query/ActiveQuery是Yii2中引入的一个 激动人心的新feature。

四、前面几条说的是ActiveRecord的应用场景。对于PDO,如果要用的话, 应该是对于比较复杂的SQL操作,比如一两句话写不清楚的。这种情况下,使用ActiveRecord来构建,其复杂程度不亚于直接写SQL,那么可以考 虑使用PDO。但我印象中,如果项目中使用的SQL语句很复杂,会被写成DB的View或者存储过程,所以,感觉PDO使用并不多,可以说是极少的。

五、追求更高效率的话,个人也不认为应该过多使用PDO,这给后期维护带来极大的难度。倒是可以考虑优化SQL查询,优化索引和表结构,使用缓存等。值得一提的是,使用缓存,是最简单、直接,成效也最为明显的手段。

六、永远没必要过早考虑性能问题。

相关文章

  • Yii框架操作数据库的几种方式

    来自:http://www.yiichina.com/topic/6570 一、Yii操作数据库的几种选择 1 P...

  • 【Yii 多数据库连接】配置

    在yii项目中,连接多数据库进行操作。step1:配置main.php 文件。 框架默认是 加载db数据库的,如果...

  • Yii2.0的学习(一)

    安装Yii2 你可以通过两种方式来安装Yii框架: 通过Composer安装 通过下载一个所需文件以及Yii框架文...

  • Yii 2.0 框架初学之实现注册功能

    初学YII框架,与大家分享一下。 首先得配置好数据库,比较简单,这里就不细说了。这里主要说YII框架代码实现。 在...

  • yii AR模式增删改查 小结

    Yii2框架数据库增删改查小结 创建一个migration 需要在当前目录下执行 php yii migrate/...

  • 安装Yii框架

    什么是yii框架 Yii框架也叫做 易 框架。它是一个基于组件,用于开发大型WEB应用的高性能PHP框架,Yii采...

  • MySQL 语法学习

    原文地址 shell 连接 Mysql 的几种方式 数据库操作 显示数据库 使用某个数据库 创建一个数据库 删除一...

  • Hibernate(01)

    首先认识Hibernate框架是ORM关系映射框架, 工作在持久(dao)层,用对象的方式操作sql数据库 优点:...

  • 第三方数据库GreenDao总结

    一.GreenDao的概述以及特点: 基于对象关系的映射方式来操作数据库的框架,提供一个接口通过操作对象的方式操作...

  • 2019-07-24

    CakePHP 是最类似于RoR的 PHP 框架,包括设计方式,数据库操作的Active Record方式;设计层...

网友评论

      本文标题:Yii框架操作数据库的几种方式

      本文链接:https://www.haomeiwen.com/subject/jfemtftx.html