thinkphp 同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)的配置方法如下:
成都創(chuàng)新互聯(lián)公司是一家以網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都宣傳片制作等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。
1、在Db.class.php腳本文件里面的類增加一個(gè)魔術(shù)方法__get(),寫(xiě)法如下:
public?function?__get($propertyName)
{?return?$this-$propertyName;
}
這個(gè)方法是用來(lái)訪問(wèn)類中protected $config成員屬性用的。有的人可能會(huì)說(shuō),直接把protected改成public豈不是更好。這樣只解決了基類的問(wèn)題,假如,子類也同樣進(jìn)行了受保護(hù),那要你更改更多的文件,這是我們做IT程序員非常不愿意看到的事情。
2、在Model.class.php中的getTableName()方法更改如下:
$tablepre?=?$this-db-config['tablepre'];
if(empty($this-trueTableName))?{
$tableName??=?empty($tablepre)???$this-tablePrefix?:?$tablepre;
if(!empty($this-tableName))?{
$tableName?.=?$this-tableName;
}
else
{
$tableName?.=?parse_name($this-name);
}
$this-trueTableName????=???strtolower($tableName);
}
return?(!empty($this-dbName)?$this-dbName.'.':'').$this-
trueTableName;這樣就完成了多庫(kù)自由切換時(shí),導(dǎo)致的表前綴問(wèn)題。
/*******************面向?qū)ο驪DO連接方式*********************/
'DB_TYPE'?=?'PDO',?//?數(shù)據(jù)庫(kù)類型
'DB_DSN'?=?'mysql:host=localhost;dbname=master',?//?DSN連接。
'DB_USER'?=?'root',?//?數(shù)據(jù)庫(kù)用戶名
'DB_PWD'?=?'123456',?//?數(shù)據(jù)庫(kù)密碼
'DB_PORT'?=?'3306',?//?數(shù)據(jù)庫(kù)端口
'DB_PREFIX'?=?'g_',?//?數(shù)據(jù)表前綴
'DB_CHARSET'?=?'utf8',?//?數(shù)據(jù)庫(kù)編碼默認(rèn)采用utf8
實(shí)例化兩條sql鏈接.
例如?
$wdb?=?mysql_connect('localhost','root','123456','a1');//負(fù)責(zé)寫(xiě)入的數(shù)據(jù)庫(kù)
$rdb?=?mysql_connect('192.168.xx.xx','root','123456','a2');//負(fù)責(zé)讀的數(shù)據(jù)庫(kù)
這樣就可以鏈接兩個(gè)數(shù)據(jù)庫(kù)了。
也許是我孤陋寡聞了,似乎沒(méi)有辦法跨庫(kù)關(guān)聯(lián)查詢吧。如果非要跨庫(kù)關(guān)聯(lián),我能想到的辦法就是把兩邊的數(shù)據(jù)查詢出來(lái)并存入一個(gè)臨時(shí)表,再查詢臨時(shí)表。不過(guò)這種方法只是用于不同庫(kù)中相同或相似的表,比如有的數(shù)據(jù)量較大的分庫(kù)項(xiàng)目。
在回過(guò)頭來(lái)看你的項(xiàng)目需求,其實(shí)根本不需要跨庫(kù)的。首先在任意一個(gè)庫(kù)里創(chuàng)建一個(gè)表,在發(fā)送會(huì)議信息給會(huì)員的時(shí)候,除了這個(gè)表的主鍵之外,只需要記錄會(huì)員的id和會(huì)議的id,這兩個(gè)id分別從兩個(gè)庫(kù)里獲取。
你如果要查看某條會(huì)議信息發(fā)送的詳情,就通過(guò)這兩個(gè)id分別從兩個(gè)庫(kù)里獲取會(huì)員信息和會(huì)議信息。
你如果要查詢出列表,用笨辦法,因?yàn)槟氵@個(gè)表肯定和會(huì)員或會(huì)議其中一個(gè)在一個(gè)庫(kù)了,可以關(guān)聯(lián),然后在列表循環(huán)中逐條查詢另一個(gè)數(shù)據(jù),雖然這樣有些影響性能,但是也比“跨庫(kù)關(guān)聯(lián)查詢”好點(diǎn),況且如果數(shù)據(jù)多的話,一般都是分頁(yè)操作的話,一個(gè)列表最多二三十條記錄,一次查詢二三十也不會(huì)有太大影響。
另一個(gè)笨辦法,就是把發(fā)送記錄列表中所有需要列出的字段都記錄在發(fā)送會(huì)議信息的記錄表里,這樣就不需要在循環(huán)查詢另一個(gè)表了。但缺點(diǎn)就是這里面的數(shù)據(jù)就不能和會(huì)員以及會(huì)議信息的數(shù)據(jù)同步,除非你在更新會(huì)員以和會(huì)議信息的數(shù)據(jù)的同時(shí)更新這個(gè)表的數(shù)據(jù)。
但不管用哪種方式,我覺(jué)得都比“跨庫(kù)關(guān)聯(lián)查詢”要好,即使真的有“跨庫(kù)關(guān)聯(lián)查詢”的方法。
只能連接一個(gè)庫(kù),庫(kù)里面可以有多張表。
我是弄IOS的,所以在這些方面我比較熟。
$conn1=mysql_connect('...','...','...'); //將第一個(gè)數(shù)據(jù)庫(kù)連接資源保存到變量conn1中
$conn2=mysql_connect('...','...','...'); //將第二個(gè)數(shù)據(jù)庫(kù)連接資源保存到變量conn2中
然后在執(zhí)行查詢操作時(shí),指定使用哪個(gè)連接資源,如:mysql_query('select ....',$conn1);
希望可以幫到你,謝謝!
應(yīng)該是這樣的
$conb=mysql_connect("localhost","root","")or die("mysql連接失敗");
$cont=mysql_connect("localhost","root","", true)or die("mysql連接失敗");
第四個(gè)參數(shù)true/false表示是否開(kāi)啟一個(gè)新的連接,默認(rèn)是false
好了,現(xiàn)在它們連接到不同的數(shù)據(jù)庫(kù)咯