Think3.2.3配置多個數(shù)據(jù)庫連接方法:

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