thinkphp可以單獨配置新數據庫,其設置方法是:1、在應用配置文件或者模塊配置文件中添加配置參數如“’DB_HOST’ => ‘localhost’…”;2、在不同的應用狀態的配置文件里面定義獨立的數據庫配置信息;3、在實例化的時候指定數據庫連接信息,語法如“$User = M(‘User’,’other_’,’mysql://root…”。
本教程操作環境:Windows7系統、thinkphp5版、Dell G3電腦。
thinkphp可以單獨配置新數據庫嗎?
可以。
Thinkphp 模型-連接數據庫獨立配置model數據庫連接
立即學習“PHP免費學習筆記(深入)”;
連接數據庫
ThinkPHP內置了抽象數據庫訪問層,把不同的數據庫操作封裝起來,我們只需要使用公共的Db類進行操作,而無需針對不同的數據庫寫不同的代碼和底層實現,Db類會自動調用相應的數據庫驅動來處理。目前的數據庫包括Mysql、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_',?//?數據庫表前綴 'DB_CHARSET'=>?'utf8',?//?字符集
數據庫的類型由DB_TYPE參數設置。
下面是目前支持的數據庫設置:?
如果DB_TYPE使用PDO類型的話,數據庫類型則由DB_DSN配置決定。
或者采用如下配置
'DB_DSN'?=>?'mysql://root:123456@localhost:3306/thinkphp#utf8'
使用DB_DSN方式定義可以簡化配置參數,DSN參數格式為:
數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名#字符集
字符集設置需要3.2.1版本以上有效,字符集如果沒有設置的話,默認為utf8。
如果兩種配置參數同時存在的話,DB_DSN配置參數優先。
注意:如果要設置分布式數據庫,暫時不支持DB_DSN方式配置。
如果采用PDO驅動的話,則必須首先配置**DB_TYPE **為pdo,然后還需要單獨配置其他參數,例如:
//PDO連接方式 'DB_TYPE'?=>?'pdo',?//?數據庫類型 'DB_USER'?=>?'root',?//?用戶名 'DB_PWD'?=>?'',?//?密碼 'DB_PREFIX'?=>?'think_',?//?數據庫表前綴 'DB_DSN'?=>?'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
注意:PDO方式的DB_DSN配置格式有所區別,根據不同的數據庫類型設置有所不同,具體可以參考PHP手冊。
配置文件定義的數據庫連接信息一般是系統默認采用的,因為一般一個應用的數據庫訪問配置是相同的。該方法系統在連接數據庫的時候會自動獲取,無需手動連接。
可以對每個模塊定義不同的數據庫連接信息,如果開啟了調試模式的話,還可以在不同的應用狀態的配置文件里面定義獨立的數據庫配置信息。
二、模型類定義
如果在某個模型類里面定義了connection屬性的話,則實例化該自定義模型的時候會采用定義的數據庫連接信息,而不是配置文件中設置的默認連接信息,通常用于某些數據表位于當前數據庫連接之外的其它數據庫,例如:
//在模型里單獨設置數據庫連接信息 namespace?Home?Model; use?Think?Model; class?UserModel?extends?Model{ protected?$connection?=?array( 'db_type'?=>?'mysql', 'db_user'?=>?'root', 'db_pwd'?=>?'1234', 'db_host'?=>?'localhost', 'db_port'?=>?'3306', 'db_name'?=>?'thinkphp', 'db_charset'?=>?'utf8', ); }
?也可以采用DSN方式定義,例如:
//在模型里單獨設置數據庫連接信息 namespace?Home?Model; use?Think?Model; class?UserModel?extends?Model{ //或者使用DSN定義 protected?$connection?=?'mysql://root:1234@localhost:3306/thinkphp#utf8'; }
?
?如果我們已經在配置文件中配置了額外的數據庫連接信息,例如:
//數據庫配置1 'DB_CONFIG1'?=>?array( 'db_type'?=>?'mysql', 'db_user'?=>?'root', 'db_pwd'?=>?'1234', 'db_host'?=>?'localhost', 'db_port'?=>?'3306', 'db_name'?=>?'thinkphp', 'db_charset'=>?'utf8', ), //數據庫配置2 'DB_CONFIG2'?=>?'mysql://root:1234@localhost:3306/thinkphp#utf8';
?那么,我們可以把模型類的屬性定義改為:
//在模型里單獨設置數據庫連接信息 namespace?Home?Model; use?Think?Model; class?UserModel?extends?Model{ //調用配置文件中的數據庫配置1 protected?$connection?=?'DB_CONFIG1'; } //在模型里單獨設置數據庫連接信息 namespace?Home?Model; use?Think?Model; class?InfoModel?extends?Model{ //調用配置文件中的數據庫配置1 protected?$connection?=?'DB_CONFIG2'; }
三、實例化定義
除了在模型定義的時候指定數據庫連接信息外,我們還可以在實例化的時候指定數據庫連接信息,例如:如果采用的是M方法實例化模型的話,也可以支持傳入不同的數據庫連接信息,例如:
$User?=?M('User','other_','mysql://root:1234@localhost/demo#utf8');
表示實例化User模型,連接的是demo數據庫的other_user表,采用的連接信息是第三個參數配置的。如果我們在項目配置文件中已經配置了DB_CONFIG2的話,也可以采用:
$User?=?M('User','other_','DB_CONFIG2');
? 需要注意的是,ThinkPHP的數據庫連接的惰性的,所以并不是在實例化的時候就連接數據庫,而是在有實際的數據操作的時候才會去連接數據庫(額外的情況是,在系統第一次實例化模型的時候,會自動連接數據庫獲取相關模型類對應的數據表的字段信息)。
推薦學習:《thinkPHP視頻教程》