程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP開發框架Yii Framework教程(25) 數據庫-Query Builder示例

PHP開發框架Yii Framework教程(25) 數據庫-Query Builder示例

編輯:PHP綜合

上一篇介紹PHP使用DAO(數據庫訪問對象接口)訪問數據庫的方法,使用DAO需要程序員編寫SQL語句,對於一些復雜的SQL語 句,Yii提供了Query Builder來幫助程序員生成SQL語句,Query Builder提供了一中面向對象的方法動態創建SQL語句,打個不 十分恰當的比較,PHP 的DAO和.Net 的DAO接口非常類型,Query builder 就有點像LINQ了,盡管和LINQ比起來功能小很多。對 於一些簡單的SQL查詢,通常不需要借助於Query Builder,比如上篇中的查詢Employee表格。

和直接使用SQL語句相比, 使用Query Builder具有下面好處:

支持通過程序動態創建比較復雜的SQL查詢.

自動為創建的SQL語句中的表名,列表 添加引號以避免和SQL保留的標志符產生沖突.

指定為參數添加引號並盡可能的使用參數綁定以減小SQL Injection的風 險。.

使用Query Builder不直接編寫SQL語句,而提供了一定程度上的數據庫抽象,從而為切換數據庫類型提供了便利。

本例查詢Chinook的兩個表Customer和Employee, 查詢EmployeeId=4管理的所有客戶的聯系信息。

如果使用SQL查 詢,可以寫作:

SELECT c.FirstName, c.LastName , c.Address,c.Email     
FROM customer c     
INNER JOIN 
employee e     
ON c.SupportRepId=e.EmployeeId     
WHERE e.EmployeeId=4

本例使用Query Builder創建SQL查詢,修改SiteController的indexAction方法:

public function actionIndex()     
{     
         
    $model = array();     
    $connection=Yii::app()->db;     
    $command=$connection->createCommand()     
        ->select('c.FirstName, c.LastName, c.Address,c.Email')     
        ->from('customer c')     
        ->join('employee e','c.SupportRepId=e.EmployeeId')     
        ->where('e.EmployeeId=4');     
         
    $dataReader=$command->query();     
         
    // each $row is an array representing a row of data     
    foreach($dataReader as $row)     
    {     
        $customer= new DataModel();     
         
        $customer->firstName=$row['FirstName'];     
        $customer->lastName=$row['LastName'];     
         
        $customer->address=$row['Address'];     
        $customer->email=$row['Email'];     
         
        $model[]=$customer;     
    }     
         
    $this->render('index', array(     
        'model' => $model,     
         
        ));     
}

可以看到Query Builder也是使用 CDbCommand , CDbCommand提供了如下查詢數據的方法:

select()

selectDistinct()

from()

where()

join()

leftJoin()

rightJoin()

crossJoin()

naturalJoin()

group()

having()

order()

limit()

offset()

union()

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved