PHP開發架構Yii Framework教程(25) 資料庫-Query Builder樣本

來源:互聯網
上載者:User
上一篇介紹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 cINNER JOINemployee eON 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 dataforeach($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()

此外資料定義方法:

createTable()renameTable()dropTable()truncateTable()addColumn()renameColumn()alterColumn()dropColumn()是createIndex()dropIndex()

可以看到CDbCommand支援的方法基本上和SQL語句的關鍵字一一對應,使不使用Query Builder全憑個人愛好,對應簡單的SQL語句可以直接使用SQL語句,對於較複雜的查詢可以藉助於Query Builder。

本例顯示結果:

以上就是PHP開發架構Yii Framework教程(25) 資料庫-Query Builder樣本的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.