天天看點

模型技術 - 資料庫連接配接

模型是 MVC 中的 M,可以了解為操作資料庫部分操作。建立資料庫連接配接

如果應用需要使用資料庫,必須配置資料庫連接配接資訊,資料庫的配置檔案有多種定義方式:

一:在配置檔案裡配置資料庫連接配接資訊

在使用模型操作之前,我們首先建立一個資料庫:thinkphp。建立一個使用者表:user。添加一些資料即可。

ThinkPHP 内置了抽象資料庫通路層,把不同的資料庫操作封裝起來。我們隻需要使用公共的 Db 類進行操作,無須針對不同的資料庫寫不同的代碼和底層實作。Db 類會自動調用相應的資料庫驅動來處理。目前支援的資料庫包括 Mysql(包含 mysql 和 mysqli)、 SqlServer、 PgSQL、 Sqlite、Oracle、Ibase、Mongo、PDO 等。

模型技術 - 資料庫連接配接

//全局配置定義

'DB_TYPE'=>'mysql', //資料庫類型

'DB_HOST'=>'localhost', //伺服器位址

'DB_NAME'=>'thinkphp', //資料庫名

'DB_USER'=>'root', //使用者名

'DB_PWD'=>'123456', //密碼

'DB_PORT'=>3306, //端口

'DB_PREFIX'=>'think_', //資料庫表字首

PS:資料庫全局配置資訊除了 PDO,均可以采用上面的設定。

//PDO專用定義

'DB_TYPE'=>'pdo', //資料庫類型

'DB_USER'=>'root', //使用者名

'DB_PWD'=>'123456', //密碼

'DB_PREFIX'=>'think_', //資料庫表字首

'DB_DSN'=>'mysql:host=localhost;dbname=thinkphp;charset=UTF8',

系統推薦使用該種方式,因為一般一個項目的資料庫通路配置是相同的,該方法系統在連接配接資料庫的時候會自動擷取,無需手動連接配接.

二:在模型類裡定義

如果在某個模型類裡面定義了connection屬性的話,則執行個體化該自定義模型的時候會采用定義的資料庫連接配接資訊,而不是配置檔案中設定的預設連接配接資訊,通常用于某些資料表位于目前資料庫連接配接之外的其它資料庫

protected $connection = array(

'dbms' => 'mysql',

'username' => 'username',

'password' => 'password',

'hostname' => 'localhost',

'hostport' => '3306',

'database' => 'dbname' );

// 或者使用下面的定義

protected $connection = "mysql://username:passwd@localhost:3306/DbName";

如果在某個模型類裡面定義了connection屬性,則在執行個體化模型對象的時候,會使用該資料庫連接配接資訊進行資料庫連接配接, 通常用于某些資料表位于目前資料庫連接配接之外的其它資料庫.

ThinkPHP并不是在一開始就會連接配接資料庫,而是在有資料查詢操作的時候才會去連接配接資料庫,額外的情況是,在系統第一次操作模型的時候,架構會自動連接配接資料庫擷取相關模型類的資料字段資訊,并緩存下來.

三:執行個體化的時候指定資料庫連接配接資訊

除了在模型定義的時候指定資料庫連接配接資訊外,我們還可以在執行個體化的時候指定資料庫連接配接資訊,例如:如果采用的是M方法執行個體化模型的話,也可以支援傳入不同的資料庫連接配接資訊

$User = M('User','other_','mysql://root:1234@localhost/demo#utf8');

表示執行個體化User模型,連接配接的是demo資料庫的other_user表,采用的連接配接資訊是第三個參數配置的。如果我們在項目配置檔案中已經配置了DB_CONFIG2的話,也可以采用:$User = M('User','other_','DB_CONFIG2');

需要注意的是,ThinkPHP的資料庫連接配接的惰性的,是以并不是在執行個體化的時候就連接配接資料庫,而是在有實際的資料操作的時候才會去連接配接資料庫(額外的情況是,在系統第一次執行個體化模型的時候,會自動連接配接資料庫擷取相關模型類對應的資料表的字段資訊)。