首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii 框架查詢生成器(Query Builder)完整指南:構建安全、可移植的 SQL

     編輯:PHP 相關知識

Yii 框架查詢生成器(Query Builder)完整指南

Yii Query Builder 提供面向對象方式構建 SQL,自動處理表/列名引用、參數綁定,防止 SQL 注入,簡化跨數據庫遷移。基於 CDbCommand 實現,支持鏈式調用與屬性賦值兩種語法。

基本用法示例

$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 注入
  • 數據庫抽象層,便於遷移 MySQL/PostgreSQL/SQLite 等

注意事項

不可混合使用純 SQL 與 Query Builder:createCommand('SELECT * FROM tbl_user') 後調用 where() 不會生效。必須從空命令開始構建。

主要方法分類

類別方法說明
數據檢索select()/selectDistinct()指定 SELECT 列,支持字符串/數組,自動引用
from()指定 FROM 表,支持別名、Schema 前綴
where()/andWhere()/orWhere()WHERE 條件,支持字符串、數組操作符(and/or/in/like 等)
join()/leftJoin()/rightJoin()/crossJoin()/naturalJoin()各類 JOIN,每次調用追加片段
group()/having()GROUP BY / HAVING
order()ORDER BY,支持 ASC/DESC
limit()/offset()LIMIT / OFFSET,不支持的 DB 自動重寫
union()UNION 合併查詢
執行與獲取queryRow()/queryAll()/queryScalar()/queryColumn()執行並獲取單行/所有行/單值/單列
getText()獲取生成的純 SQL 字符串
params獲取綁定參數數組
數據操作insert($table, $columns)構建並執行 INSERT,自動參數綁定
update($table, $columns, $conditions, $params)構建並執行 UPDATE
delete($table, $conditions, $params)構建並執行 DELETE
架構操作createTable()/renameTable()/dropTable()/truncateTable()建表/重命名/刪表/清空表
addColumn()/dropColumn()/renameColumn()/alterColumn()列增刪改
addForeignKey()/dropForeignKey()外鍵增刪
createIndex()/dropIndex()索引增刪

抽象數據類型(自動映射物理類型)

  • pk → int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
  • string → varchar(255)
  • text → text
  • integer → int(11)
  • boolean → tinyint(1)
  • money → decimal(19,4) (v1.1.8+)

替代語法:屬性賦值與數組初始化

$command->select = array('id', 'username'); // 等同 $command->select(array('id','username'));

$row = Yii::app()->db->createCommand(array(
    'select' => array('id', 'username'),
    'from' => 'tbl_user',
    'where' => 'id=:id',
    'params' => array(':id'=>1),
))->queryRow();

多查詢復用

$command = Yii::app()->db->createCommand();
$users = $command->select('*')->from('tbl_users')->queryAll();
$command->reset(); // 清理上一條查詢
$posts = $command->select('*')->from('tbl_posts')->queryAll();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved