Yii使用PDO(PHP Date Object)連接各種各樣的數(shù)據(jù)庫,因此,幾乎所有主流的數(shù)據(jù)庫,Yii都可以 很好地提供支持。這也是一個成熟框架所應(yīng)具有的廣泛適用性。
在對數(shù)據(jù)庫進(jìn)行任何操作之前,都必須先與數(shù)據(jù)庫服務(wù)器建立連接。在Yii應(yīng)用中,有一個專門的核心 組件(component)用于處理數(shù)據(jù)庫連接,我們很容易可以在配置文件中找到他:
'components' => [ 'db' => [ 'class' => 'yiidbConnection', 'dsn' => 'mysql:host=localhost;dbname=yii2advanced', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], // ... ...],// ... ...
Yii用 yiidbConnection 來表示數(shù)據(jù)庫連接。這個Connection實(shí)現(xiàn)了 對于PDO的一個簡單封裝,并掩蓋了各種數(shù)據(jù)庫的區(qū)別,實(shí)現(xiàn)了一個統(tǒng)一的開發(fā)接口。
這樣,使得你在 編程過程中,可以忽略絕大多數(shù)的數(shù)據(jù)庫兼容問題,可以更加專注于功能開發(fā)。比如,你不用再擔(dān)心在 MySQL下不能使用Money類型的字段等等。
在 yiidbConnection 中,有一個 $schemaMap 數(shù)組,用于建立PDO數(shù)據(jù)庫驅(qū)動與具體的 schema 類間的映射關(guān)系:
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];
我們可以認(rèn)為Yii默認(rèn)情況下支持上述數(shù)組中的10種DBMS(6個Schema),這在絕大多數(shù)情況下, 是完全足夠的。萬一你使用了超出這一范圍的DBMS,在確保兼容的情況下,你可以自己寫一個Schema, 使Yii可以支持該DBMS。
推薦學(xué)習(xí):yii框架