ThinkPHP內(nèi)置了(le)≠≈ 抽象數(shù)據庫訪問(wèn)層,把不(bù)同的(de)數(sh≥ù)據庫操作(zuò)封裝起來(lái),我們隻需要(yào)'€ε使用(yòng)公共的(de) Db類進行(∞♣xíng)操作(zuò),而無需針對(duì)不(bù)同 ♣的(de)數(shù)據庫寫不(bù)同的(d™↑e)代碼和(hé)底層實現(xiàn),Db類會(huì)自(zì✘α)動調用(yòng)相(xiàng)應的(de)數(shù)據 ↕₩庫驅動來(lái)處理(lǐ)。目前的(de)數(shù)據庫包括Mysql、¶✔ SqlServer、PgSQL、Sqlite、Oracle、Ibase、M±"¥ongo,也(yě)包括對(duì)PDO的(de)支持。
如(rú)果應用(yòng)需要(yào)使用→εα♣(yòng)數(shù)據庫,必須配置數(shù)據庫連接信"₹≈息,數(shù)據庫的(de)配置文(wé≤≠n)件(jiàn)有(yǒu)多(duō)種定義方式。δα§'
一(yī)、全局配置定義
常用(yòng)的(de)配置方式是(shì)在λ←↑應用(yòng)配置文(wén)件(jiàn)或者模塊 φγ配置文(wén)件(jiàn)中添加下(xià)面的(d✘±™e)配置參數(shù):
//數(shù)據庫配置信息'DB_TYPE' => 'mysql', // 數(shù)據庫類型'DB_HOST' => 'localhost', // 服務器(qì)地(dì)址'DB_NAME' => 'thinkphp', // 數(shù)據庫名'DB_USER' => 'root', // 用(yòng)戶名'DB_PWD' => '123456', // 密碼'DB_PORT' => 3306, // 端口'DB_PREFIX' => 'think_', // 數(shù)據庫表前綴'DB_CHARSET'=> 'utf8', // 字符集
數(shù)據庫的(de)類型由DB_TYPE參數(shù)設置。
下(xià)面是(shì)目前支持的(de♦ ¶)數(shù)據庫設置:
| DB_TYPE設置 | 支持的(de)數(shù)據庫類型 |
|---|---|
| mysql或mysqli | mysql |
| pgsql | pgsql |
| sqlite | sqlite |
| mssql 或sqlsrv | sqlserver |
| oracle | oracle |
| ibase | ibase |
| mongo | mongo |
| PDO | PDO支持的(de)所有(yǒu)數(shù)據庫 |
如(rú)果DB_TYPE使用(yòng)
PDO類型的(de)話(huà),數(shù)據庫類型則由₩•≈↕DB_DSN配置決定。
或者采用(yòng)如(rú)下(xià)配置∏π
'DB_DSN' => 'mysql://root:123456δφ☆@localhost:3306/thinkphp#ut✔¥f8'
使用(yòng)DB_DSN方式定義可(kě)以簡化₩εβ↑(huà)配置參數(shù),DSN參數(shù)格式為(wèi):
數(shù)據庫類型://用(yòng)戶名:密碼@數(sε∑™±hù)據庫地(dì)址:數(shù)據庫端口/數(shù)據庫名#字符集
字符集設置需要(yào)3.2.1版本以上(shàng)有(yǒu)效<',字符集如(rú)果沒有(yǒu)設置的(de)話(huà),默認 ∏✘"為(wèi)utf8。
如(rú)果兩種配置參數(shù)同時(shí)存在↑ε∑的(de)話(huà),DB_DSN配置參數(shù)優先。
注意:如(rú)果要(yào)設置分(fēn)布式數δ±$(shù)據庫,暫時(shí)不(bù)支持DB_DSN方式™★×配置。
如(rú)果采用(yòng)PDO驅動的(de)話(huà),則必須首先配置φ'↔¥DB_TYPE為(wèi)pdo,然後還(hái)需要(yào)單獨配置其他(tā)參數(shù),例如Ω€∞₹(rú):
//PDO連接方式'DB_TYPE' => 'pdo', // 數(shù)據庫類型'DB_USER' => 'root', // 用(yòng)戶名'DB_PWD' => '', // 密碼'DB_PREFIX' => 'think_', // 數(shù)據庫表前綴'DB_DSN' => 'mysql:host=localhost;db ¶name=thinkphp;charset=utf8'
注意:PDO方式的(de)DB_DSN配置格♣✘☆≤式有(yǒu)所區(qū)别,根據不(bù)同的(de∑♦>)數(shù)據庫類型設置有(yǒu)所不(bù)同δ'αε,具體(tǐ)可(kě)以參考PHP手冊。
配置文(wén)件(jiàn)定義的(deβ>₽÷)數(shù)據庫連接信息一(yī)般是(shì∑)系統默認采用(yòng)的(de),因為(wèi)一(yī)₽★般一(yī)個(gè)應用(yòng)的(de)數(sh♣©&ù)據庫訪問(wèn)配置是(shì)相(xiàng)同的(de)→§↕™。該方法系統在連接數(shù)據庫的(de)時(shí)候&÷&≠會(huì)自(zì)動獲取,無需手動連接。
可(kě)以對(duì)每個(gè)模塊定義不(bù)同§ε的(de)數(shù)據庫連接信息,如(r≈↔✘ú)果開(kāi)啓了(le)調試模式的(de)φ×∑§話(huà),還(hái)可(kě)以在不(bù)同的(de)應用(yònλ♥g)狀态的(de)配置文(wén)件(jiàn)裡(lǐ)面定義獨↓÷立的(de)數(shù)據庫配置信息。
二、模型類定義
如(rú)果在某個(gè)模型類裡(lǐ)面定義了(le)connection屬性的(de)話(huà),則實例化(huà)該自(zì)定義模∑ 型的(de)時(shí)候會(huì)采用↔Ω(yòng)定義的(de)數(shù)據庫連接信息,而不(bù)是(sσ★hì)配置文(wén)件(jiàn)中設置的(de)默認連接信息<♠£,通(tōng)常用(yòng)于某些(xiē)數(s↔✔↕®hù)據表位于當前數(shù)據庫連接之外(w≤βài)的(de)其它數(shù)據庫,例如(rú):
//在模型裡(lǐ)單獨設置數(shù)據庫連接信息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',);}
也(yě)可(kě)以采用(yòng)DSN方式定義,$§∞例如(rú):
//在模型裡(lǐ)單獨設置數(shù)據庫連接信息namespace Home\Model;use Think\Model;class UserModel extends Model{//或者使用(yòng)DSN定義protected $connection = 'mysql://root:1234@localhost:3®βγ306/thinkphp#utf8';}
如(rú)果我們已經在配置文(wén)件(jiàn)中配置了(le↔β±★)額外(wài)的(de)數(shù)據庫連接信息,例如(rú):
//數(shù)據庫配置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',),//數(shù)據庫配置2'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/th↕γinkphp#utf8';
那(nà)麽,我們可(kě)以把模型類的(de)屬性&<定義改為(wèi):
//在模型裡(lǐ)單獨設置數(shù)據庫連接信息namespace Home\Model;use Think\Model;class UserModel extends Model{//調用(yòng)配置文(wén)件(jiàn)中的(de)數(¶εβshù)據庫配置1protected $connection = 'DB_CONFIG1';}
//在模型裡(lǐ)單獨設置數(shù)據庫連接信息↓∑namespace Home\Model;use Think\Model;class InfoModel extends Model{//調用(yòng)配置文(wén)件(jiàn)中的(de)數(sh→ ←<ù)據庫配置1protected $connection = 'DB_CONFIG2';}
三、實例化(huà)定義
除了(le)在模型定義的(de)時(shí)候指定數(shù)∑↑&據庫連接信息外(wài),我們還(hái≤♣"☆)可(kě)以在實例化(huà)的(de)時(shí)候指定數(×↑$shù)據庫連接信息,例如(rú): 如(rú)果采用(yò♠÷ng)的(de)是(shì)M方法實例化(huà)模型的(de)話(∞'huà),也(yě)可(kě)以支持傳入不(bù)同的(de)數(shù)據庫±ε 連接信息,例如(rú):
$User = M('User','other_','mysql://root:1234@localho st/demo#utf8');
表示實例化(huà)User模型,連接的(de)是(∞↕σ♦shì)demo數(shù)據庫的(de)other_user表∑δ,采用(yòng)的(de)連接信息是(s✘≠↕hì)第三個(gè)參數(shù)配置的(de)。如(★↓rú)果我們在項目配置文(wén)件(jiàn)Ω€€♠中已經配置了(le)DB_CONFIG2的(de)話(huà),也(yě)可(kě)以采用(yòng):
$User = M('User','other_','DB_CONFIG2');
需要(yào)注意的(de)是(shì),Thiβ≤>'nkPHP的(de)數(shù)據庫連接的(de)惰性的(de)£&♣∑,所以并不(bù)是(shì)在實例化(huà)的( €×©de)時(shí)候就(jiù)連接數(shù)✔≥δ據庫,而是(shì)在有(yǒu)實際的(de)數(shù≤→✘)據操作(zuò)的(de)時(shí)候才會(huì)去(qù)連✔♠"接數(shù)據庫(額外(wài)的(de)情況是(shì),在系統第一(yī€σ)次實例化(huà)模型的(de)時(shí)候,會(huì)自(z©Ωì)動連接數(shù)據庫獲取相(xiàng)關模型類對(duì)應★÷的(de)數(shù)據表的(de)字段信息)。




