Yii使用PDO(PHP Date Object)連接各種各樣的數據庫,因此,幾乎所有主流的數據庫,Yii都可以 很好地提供支持。這也是一個成熟框架所應具有的廣泛適用性。
在對數據庫進行任何操作之前,都必須先與數據庫服務器建立連接。在Yii應用中,有一個專門的核心 組件(component)用于處理數據庫連接,我們很容易可以在配置文件中找到他:
'components' => [ 'db' => [ 'class' => 'yiidbConnection', 'dsn' => 'mysql:host=localhost;dbname=yii2advanced', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], // ... ...],// ... ...
Yii用 yiidbConnection 來表示數據庫連接。這個Connection實現了 對于PDO的一個簡單封裝,并掩蓋了各種數據庫的區別,實現了一個統一的開發接口。
這樣,使得你在 編程過程中,可以忽略絕大多數的數據庫兼容問題,可以更加專注于功能開發。比如,你不用再擔心在 MySQL下不能使用Money類型的字段等等。
在 yiidbConnection 中,有一個 $schemaMap 數組,用于建立PDO數據庫驅動與具體的 schema 類間的映射關系:
public $schemaMap = [ 'pgsql' => 'yiidbpgsqlSchema', // PostgreSQL 'mysqli' => 'yiidbmysqlSchema', // MySQL 'mysql' => 'yiidbmysqlSchema', // MySQL 'sqlite' => 'yiidbsqliteSchema', // sqlite 3 'sqlite2' => 'yiidbsqliteSchema', // sqlite 2 'sqlsrv' => 'yiidbmssqlSchema', // newer MSSQL driver on MS Windows hosts 'oci' => 'yiidbociSchema', // Oracle driver 'mssql' => 'yiidbmssqlSchema', // older MSSQL driver on MS Windows hosts 'dblib' => 'yiidbmssqlSchema', // dblib drivers on GNU/Linux (and maybe other OSes) hosts 'cubrid' => 'yiidbcubridSchema', // CUBRID];
我們可以認為Yii默認情況下支持上述數組中的10種DBMS(6個Schema),這在絕大多數情況下, 是完全足夠的。萬一你使用了超出這一范圍的DBMS,在確保兼容的情況下,你可以自己寫一個Schema, 使Yii可以支持該DBMS。
推薦學習:yii框架