Think3.2.3配置多個(gè)數(shù)據(jù)庫(kù)連接方法:
專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)張灣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
一、全局配置定義
常用的配置方式是在應(yīng)用配置文件或者模塊配置文件中添加下面的配置參數(shù):
//數(shù)據(jù)庫(kù)配置信息
'DB_TYPE' = 'mysql', // 數(shù)據(jù)庫(kù)類型
'DB_HOST' = 'localhost', // 服務(wù)器地址
'DB_NAME' = 'thinkphp', // 數(shù)據(jù)庫(kù)名
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '123456', // 密碼
'DB_PORT' = 3306, // 端口
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫(kù)表前綴
'DB_CHARSET'= 'utf8', // 字符集
數(shù)據(jù)庫(kù)的類型由DB_TYPE參數(shù)設(shè)置。
下面是目前支持的數(shù)據(jù)庫(kù)設(shè)置:
DB_TYPE設(shè)置 支持的數(shù)據(jù)庫(kù)類型
mysql或mysqli mysql
pgsql pgsql
sqlite sqlite
mssql 或sqlsrv sqlserver
oracle oracle
ibase ibase
mongo mongo
PDO PDO支持的所有數(shù)據(jù)庫(kù)
如果DB_TYPE使用PDO類型的話,數(shù)據(jù)庫(kù)類型則由DB_DSN配置決定。
或者采用如下配置
'DB_DSN' = 'mysql://root:123456@localhost:3306/thinkphp#utf8'
使用DB_DSN方式定義可以簡(jiǎn)化配置參數(shù),DSN參數(shù)格式為:
數(shù)據(jù)庫(kù)類型://用戶名:密碼@數(shù)據(jù)庫(kù)地址:數(shù)據(jù)庫(kù)端口/數(shù)據(jù)庫(kù)名#字符集
字符集設(shè)置需要3.2.1版本以上有效,字符集如果沒有設(shè)置的話,默認(rèn)為utf8。
如果兩種配置參數(shù)同時(shí)存在的話,DB_DSN配置參數(shù)優(yōu)先。
注意:如果要設(shè)置分布式數(shù)據(jù)庫(kù),暫時(shí)不支持DB_DSN方式配置。
如果采用PDO驅(qū)動(dòng)的話,則必須首先配置DB_TYPE為pdo,然后還需要單獨(dú)配置其他參數(shù),例如:
//PDO連接方式
'DB_TYPE' = 'pdo', // 數(shù)據(jù)庫(kù)類型
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '', // 密碼
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫(kù)表前綴
'DB_DSN' = 'mysql:host=localhost;dbname=thinkphp;charset=utf8'
注意:PDO方式的DB_DSN配置格式有所區(qū)別,根據(jù)不同的數(shù)據(jù)庫(kù)類型設(shè)置有所不同,具體可以參考PHP手冊(cè)。
配置文件定義的數(shù)據(jù)庫(kù)連接信息一般是系統(tǒng)默認(rèn)采用的,因?yàn)橐话阋粋€(gè)應(yīng)用的數(shù)據(jù)庫(kù)訪問配置是相同的。該方法系統(tǒng)在連接數(shù)據(jù)庫(kù)的時(shí)候會(huì)自動(dòng)獲取,無需手動(dòng)連接。
可以對(duì)每個(gè)模塊定義不同的數(shù)據(jù)庫(kù)連接信息,如果開啟了調(diào)試模式的話,還可以在不同的應(yīng)用狀態(tài)的配置文件里面定義獨(dú)立的數(shù)據(jù)庫(kù)配置信息。
二、模型類定義
如果在某個(gè)模型類里面定義了connection屬性的話,則實(shí)例化該自定義模型的時(shí)候會(huì)采用定義的數(shù)據(jù)庫(kù)連接信息,而不是配置文件中設(shè)置的默認(rèn)連接信息,通常用于某些數(shù)據(jù)表位于當(dāng)前數(shù)據(jù)庫(kù)連接之外的其它數(shù)據(jù)庫(kù),例如:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫(kù)連接信息
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方式定義,例如:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫(kù)連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
//或者使用DSN定義
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
}
如果我們已經(jīng)在配置文件中配置了額外的數(shù)據(jù)庫(kù)連接信息,例如:
//數(shù)據(jù)庫(kù)配置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ù)據(jù)庫(kù)配置2
'DB_CONFIG2' = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
那么,我們可以把模型類的屬性定義改為:
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫(kù)連接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
//調(diào)用配置文件中的數(shù)據(jù)庫(kù)配置1
protected $connection = 'DB_CONFIG1';
}
//在模型里單獨(dú)設(shè)置數(shù)據(jù)庫(kù)連接信息
namespace Home\Model;
use Think\Model;
class InfoModel extends Model{
//調(diào)用配置文件中的數(shù)據(jù)庫(kù)配置1
protected $connection = 'DB_CONFIG2';
}
三、實(shí)例化定義
除了在模型定義的時(shí)候指定數(shù)據(jù)庫(kù)連接信息外,我們還可以在實(shí)例化的時(shí)候指定數(shù)據(jù)庫(kù)連接信息,例如: 如果采用的是M方法實(shí)例化模型的話,也可以支持傳入不同的數(shù)據(jù)庫(kù)連接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo#utf8');
表示實(shí)例化User模型,連接的是demo數(shù)據(jù)庫(kù)的other_user表,采用的連接信息是第三個(gè)參數(shù)配置的。如果我們?cè)陧?xiàng)目配置文件中已經(jīng)配置了DB_CONFIG2的話,也可以采用:
$User = M('User','other_','DB_CONFIG2');
需要注意的是,ThinkPHP的數(shù)據(jù)庫(kù)連接的惰性的,所以并不是在實(shí)例化的時(shí)候就連接數(shù)據(jù)庫(kù),而是在有實(shí)際的數(shù)據(jù)操作的時(shí)候才會(huì)去連接數(shù)據(jù)庫(kù)(額外的情況是,在系統(tǒng)第一次實(shí)例化模型的時(shí)候,會(huì)自動(dòng)連接數(shù)據(jù)庫(kù)獲取相關(guān)模型類對(duì)應(yīng)的數(shù)據(jù)表的字段信息)。
所有框架中最神奇的、開發(fā)最迅速的是ruby on rails,號(hào)稱比別的框架快4倍,所言非虛,因?yàn)閞ails有自動(dòng)代碼生成器功能,創(chuàng)建一個(gè)模型,自動(dòng)給你搭好CURD操作。后來的很多框架,包括django(python),lavarel(php),cakephp(php)都是模仿rails,但都不如rails,主要原因在于ruby語(yǔ)言本身的簡(jiǎn)潔與優(yōu)美,讀rails的代碼感覺特別舒服,特別精練,一點(diǎn)不繞(很少有php框架中常見的大段檢測(cè)、對(duì)比、if判斷代碼),而其它語(yǔ)言的框架都達(dá)不到這點(diǎn)
目前最活躍的框架是thinkphp、CI、YII社區(qū)也還可以,其余的社區(qū)人氣很差,沒法考慮,尤其是rails,在中國(guó)人氣非常之低,配置與啟動(dòng)需用命令行,win系統(tǒng)不能很好兼容,問題都找不到答案,最終不得不舍棄。
從人氣與文檔詳細(xì)上,最終勝出的是tp,ci,YII,ZEND至今連個(gè)中文手冊(cè)都沒有,直接pass,不管它號(hào)稱多么強(qiáng)大,連個(gè)中文社區(qū)與文檔都沒有,出了問題還要翻墻看英文,太痛苦了
在TP、YII、CI三者的角逐中,YII同樣有命令行(有命令行的一律減分),有自動(dòng)生成器功能,但是有個(gè)巨大缺點(diǎn):生成出很多不用的空文件夾,導(dǎo)致文件結(jié)構(gòu)非?;靵y,控制器文件、模型文件夾四處都有,不知道哪個(gè)跟哪個(gè),而且YII的函數(shù)比較碎片化,語(yǔ)法不夠清晰也不好懂,最終PASS
TP是國(guó)產(chǎn)的,如果CI給80分,TP也可以給75分,兩者很接近,tp社區(qū)人氣很活躍,有什么問題百度一搜就出來了,開源代碼也非常多,類庫(kù)集成度跟CI不相上下,差就差在文件結(jié)構(gòu)上稍遜CI一些,語(yǔ)法易懂性也比CI稍差
5樓也繼承Db_Table:lol:
,我開始也繼承,后來發(fā)現(xiàn)db自帶的功能功能很強(qiáng)大,就不繼承。如果不繼承Db_Table,可以對(duì)Zend_Db進(jìn)行繼承,給數(shù)據(jù)庫(kù)分配標(biāo)識(shí),然后在模型中指定要用的適配器就可以了7樓把我繞了,通俗一點(diǎn),group就是垂直切割---分庫(kù),node就是水平切割--分表
本文題目:多個(gè)數(shù)據(jù)庫(kù)連接的php框架 mysql 多個(gè)數(shù)據(jù)庫(kù)
文章源于:http://vcdvsql.cn/article32/ddoigsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、電子商務(wù)、面包屑導(dǎo)航、標(biāo)簽優(yōu)化、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容