Yii definitive guide 翻译之一 query builder:介绍和准备工作。

本文介绍Yii框架中的查询生成器,一种基于面向对象的方式生成SQL查询。文章详细讲解了其用法,包括如何生成复杂的SQL语句、自动处理表名和列名、参数绑定等特性。

本文由Yii官方网站尚未汉化的the definitive guide to Yii翻译而来,译文为原创,转载请标注本博客地址。

英文版原文地址


查询生成器(Query Builder)



    Yii的查询生成器提供了一种基于面向对象的办法来生成SQL查询。它允许开发者使用类的方法和属性来有针对性地制定SQL语句的各个单独部分。然后这个类就会将开发者定义的SQL的不同的部分组装起来形成SQL语句,并通过调用DAO的方法来执行SQL查询。下面是一个典型的使用查询生成器来生成select语句的例子:
$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();

    当你需要针对SQL语句的各个部分进行组装,或者在你的应用中需要基于某些条件性的逻辑来生成SQL语句的时候,上面的例子就能够很好地帮助你摆平这些。使用查询生成器来生成SQL语言能给你带来的主要好处包括:

    1、它允许你程序化地生成复杂的SQL语句。
    2、它能够自动给表名和列名做一些处理,来防止因SQL的保留字和特殊字符带来的冲突。
    3、它也能尽可能地处理参数的值和使用参数绑定,这样能够对防止SQL注入攻击起到一些帮助作用。
    4、它对数据库的严格抽象可以简化app在不同数据库平台上的迁移工作。

    我们并不是强制性地要求使用查询生成器。事实上,如果你的查询十分简单,直接把SQL写出来会更加容易,而且程序执行得更快。

    注意:查询生成器并不能够修改一个现有的SQL语句。比如说下面的这些用法并不能够起作用:
    $command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');


    // the following line will NOT append WHERE clause to the above SQL
    $command->where('id=:id', array(':id'=>$id));

    也就是说,不要把纯SQL语句和查询生成器混在一起。


1、准备工作

    Yii的查询生成器是由CDbCommand这个类来提供的,在Data Access Objects的描述中,它是一个主要用来查询数据库的类。
    下面,我们就来创建一个关于CDbCommand类的实例来开始使用我们的查询生成器:
    $command = Yii::app()->db->createCommand();

    我们使用Yii::app()->db来获得数据库链接,然后再调用CDbCommand::createCommand() 来创建我们需要的查询命令。

    看到了吧,跟我们在Data Access Objects中描述的不一样.因为接下来我们将要使用查询生成器来生成SQL查询语句的各个部分,所以现在调用createCommand的时候并没有给他提供SQL查询语句,后面我们将要解释如何使用查询生成器来生成SQL语句。


本文由Yii官方网站尚未汉化的the definitive guide to Yii翻译而来,译文为原创,转载请标注本博客地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值