據訪問對象(DAO) 對訪問存儲在不同數據庫管理系統(DBMS)中的數據提供了一個通用的API。 因此,在將底層 DBMS 更 換為另一個時,無需修改使用了 DAO 訪問數據的代碼。
Yii DAO 基於 PHP Data Objects (PDO) 構建。它是一個為眾多 流行的DBMS提供統一數據訪問的擴展,這些 DBMS 包括 MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 擴展和特定的 PDO 數據庫驅動(例如PDO_MYSQL) 必須安裝。
Yii DAO 主要包含如下四個類:
CDbConnection: 代表一個數據庫 連接。
CDbCommand: 代表一條通過數據庫執行的 SQL 語句。
CDbDataReader: 代表一個只向前移動的,來自一個查詢結果集中的行的流。
CDbTransaction: 代表一個數據庫事務。
下面,我們介紹 Yii DAO 在不同場景中的應用。 1. 建立數據庫連接
要建立一個數據庫連接,創建一個 CDbConnection 實例並將其激活。 連接到數據庫需要一個數據源 的名字(DSN)以指定連接信息。用戶名和密碼也可能會用到。 當連接到數據庫的過程中發生錯誤時 (例如,錯誤的 DSN 或無 效的用戶名/密碼),將會拋出一個異常。
$connection=new CDbConnection($dsn,$username,$password); // 建立連接。你可以使用 try...catch 捕獲可能拋出的異常 $connection->active=true; ...... $connection->active=false; // 關閉連接
DSN 的格式取決於所使用的 PDO 數據庫驅動。總體來說, DSN 要含 有 PDO 驅動的名字,跟上一個冒號,再跟上驅動特定的連接語法。可查閱 PDO 文檔 獲取更多信息。 下面是一個常用DSN格式 的列表。
SQLite: sqlite:/path/to/dbfile
MySQL: mysql:host=localhost;dbname=testdb
PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
SQL Server: mssql:host=localhost;dbname=testdb
Oracle: oci:dbname=//localhost:1521/testdb
由於 CDbConnection 繼承自 CApplicationComponent,我們也可以將其作為一個 應用組件 使用。要這樣做的話, 請在 應 用配置 中配置一個 db (或其他名字)應用組件如下:
本例使用MySQL chinook 數據庫,修改 protected/config/main.php
'components'=>array( 'db'=>array( 'class'=>'CDbConnection', 'connectionString'=>'mysql:host=localhost;dbname=chinook', 'username'=>'root', 'password'=>'password', 'emulatePrepare'=>true, // needed by some MySQL installations ), ),
然後我們就可以通過 Yii::app()->db 訪問數據庫連接了。它已經被自動激活了,除非我們特意配置了 CDbConnection::autoConnect 為 false。通過這種方式,這個單獨的DB連接就可以在我們代碼中的很多地方共享。
2. 執行 SQL 語句
數據庫連接建立後,SQL 語句就可以通過使用 CDbCommand 執行了。你可以通過使用指定的SQL語句作為 參數調用 CDbConnection::createCommand() 創建一個 CDbCommand 實例。
為簡單起見,我們使用Chinook數據庫中的 Employee表,修改DataModel
class DataModel { public $employeeId; public $firstName; public $lastName; public $title; public $address; public $email; }
注:創建DataModel這一步可以選。