天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ThinkPHP實現多數據庫連接的解決方法

Thinkphp實現連接多個數據的時候,如果數據庫在同一個服務器里的話只需要這樣定義模型:

class MembersModel extends Model{protected $trueTableName = 'members.members'; //數據庫名.表名(包含了前綴)}

然后就可以像D("Members");這樣實例化模型,像普通模型那樣操作了。
但后來發現他的數據庫在兩個不同的服務器,這樣上面的方法就不行了。
這時候就需要使用TP的多數據連接特性了。

對此,查閱官方文檔進行測試并修正之后得出了如下的解決方法:

要建立多數據連接,首先要構造數據庫配置參數。但是如果每次都在建立多數據庫連接的時候都建立數據庫配置數組,這樣就會很麻煩,還不如寫在配置文件里。這里怎么寫還是需要有點技巧的。

<?php$config=  array('DEBUG_MODE'=>true,'default_module'=>'Index','ROUTER_ON'=>TRUE,'DATA_RESULT_TYPE'=>1,'SHOW_RUN_TIME'=>true,      // 運行時間顯示'SHOW_ADV_TIME'=>true,      // 顯示詳細的運行時間'SHOW_DB_TIMES'=>true,      // 顯示數據庫查詢和寫入次數'SHOW_CACHE_TIMES'=>true,    // 顯示緩存操作次數'SHOW_USE_MEM'=>true,      // 顯示內存開銷'HTML_FILE_SUFFIX'=>'.shtml',   // 默認靜態文件后綴'HTML_CACHE_ON'  =>false,     // 默認關閉靜態緩存'HTML_CACHE_TIME'=>60,     // 靜態緩存有效期'HTML_READ_TYPE'=>1,      // 靜態緩存讀取方式 0 readfile 1 redirect'HTML_URL_SUFFIX'=>'.shtml',  // 偽靜態后綴設置//默認數據庫鏈接'DB_TYPE'=>'mysql','DB_HOST'=>'localhost','DB_NAME'=>'news','DB_USER'=>'root','DB_PWD'=>'123','DB_PORT'=>'3306','DB_PREFIX'=>'news_',//我的第一個數據庫連接'DB_BBS'=>array('dbms' => 'mysql','username' => 'discuz','password' => '123','hostname' => 'localhost','hostport' => '3306','database' => 'discuz'),//第二個數據庫鏈接,'DB_NEWS'=>array('dbms'=>'mysql','username'=>'root','password'=>'123','hostname'=>'localhost','hostport'=>'3306','database'=>'news'));return $config;?>

至此我們就可以用C("DB_BBS")和C("DB_NEWS")來得到數據庫的配置數組。
配置好了,現在需要實例化模型。因為我們這個模型需使用兩個不同的數據庫的連接,項目的配置文件里默認了個數據庫配置,如果你建立了某個表的模型比如UserModel.class.php
如果你用D("User");但假如當前默認的數據庫里沒User個表的話就會報錯。所以我們要建立個空模型??漳P褪遣粫x表的。
有兩種方法建立空模型。$dao=D();和$dao=new Model();都可以。

$dao=D();

實例化模型后,我們需要增加數據庫模型;

$dao->addConnect(C("DB_BBS"),1,true);$dao->addConnect(C("DB_NEWS"),2,true);

說一下這個addConnect();這個函數的原型在1.0.3和1.0.4是有區別的。
在1.0.3的原型是:

boolean addConnect (mixed $config, mixed $linkNum, [boolean $eqType = true])

在1.0.4的原型是:

boolean addConnect (mixed $config, mixed $linkNum)

少了第三個參數。
第一個參數是數據庫的配置數組,第二個參數是添加的連接的編號,這個編號在切換數據庫連接的時候需要給出是那個序號的連接。注意內置的數據庫連接序號是0,所以額外的數據庫連接序號應該從1開始.第三個參數是 如果兩個數據庫是否是相同的連接,是就是true;

添加完數據庫連接后,就可以隨時切換數據庫連接了。比如我們這要用DB_NEWS這個數據庫,就這么寫:

$dao->switchConnect(2);

因為這里只是建立了數據庫的連接,并沒有選表,所以接下來需要選表。
注意這里的表名是全名,即表的前綴加表名。因為我們在連接數據庫的配置數組里沒前綴。我覺得應該可以定義,但我不知道。現在就這樣了。

$dao->table("cdb_members");

之后就可以像普通模型一樣的用這個模型了。
比如我要查詢傳遞過來的ID的用戶的所有信息 :

$map=array("id"=>$_GET["id"]);$res=$dao->find($map);

可以看看查詢是否成功了。

dump($res);

如果你現在要用DB_BBS的數據庫的表,只需再切換一次連接;

$dao->switchConnect(2);

然后再選表查詢。記住,切換模型后一定要再選一次表,不然會出錯。
之后又可以像普通模型那樣操作了。
下面針對手冊指出里面存在的幾處問題:

1.實例化多數據庫連接的時候建立了個非空的模型。(好像還寫錯了。)這樣可能會出錯。建議建立空模型;
2.addConnect()的參數在不同的版本是不同的,手冊中沒寫出來;
3.建立了空模型后需要選表,這個手冊里沒有。

針對以上幾點,Thinkphp使用者可以根據版本的不同酌情進行相應的調整。

php技術ThinkPHP實現多數據庫連接的解決方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: AAA级精品无码久久久国片 | 亚洲国产第一区二区三区 | 十九禁啊啪射视频在线观看 | 后入内射国产一区二区 | 日本888xxxx| 亚洲AV香蕉一区区二区三区蜜桃 | 亚洲中文久久精品AV无码 | 亚洲国产精品VA在线看黑人 | 野花影院手机在线观看 | 亚洲视频在线免费 | 国产精品久久人妻拍拍水牛影视 | 国产精品无码亚洲精品 | 素人约啪第五季 | 卫生间被教官做好爽HH视频 | 野花4在线观看 | 风月宝鉴之淫乱英雄传 电影 | 解开美女胸衣2破解版 | 亚洲福利电影一区二区? | 高清日本片免费观看 | 一本道高清无码v | 麻豆一区二区三区蜜桃免费 | 风情韵味人妻HD | 91国在线啪精品一区 | 九九九色成人网 | 男人J进入女人P免费狂躁 | 亚洲日产2020乱码草莓毕 | 久久夜色噜噜噜亚洲AV0000 | 狠狠躁日日躁人人爽 | 欧美性爱 先锋影音 | 色欲AV亚洲情无码AV蜜桃 | chinese极品嫩模videos | 午夜性色一区二区三区不卡视频 | 日本漫画母亲口工子全彩 | 久见久热 这里只有精品 | 亚洲午夜久久久无码精品网红A片 | 国产传媒精品1区2区3区 | 青青青青久久久久国产的 | 天美传媒在线观看完整高清 | 国产日韩精品一区二区三区在线 | 国产成人永久免费视频 | 国产精品亚洲视频在线观看 |