這篇文章主要介紹了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個表的話就會報錯。所以我們要建立個空模型。空模型是不會選表的。
有兩種方法建立空模型。 $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;
$dao->switchConnect(2);因為這裡只是建立了資料庫的連接,並沒有選表,所以接下來需要選表。
注意這裡的表名是全名,即表的前綴加表名。因為我們在連接資料庫的設定數組裡沒前綴。我覺得應該可以定義,但我不知道。現在就這樣了。
$dao->table("cdb_members");之後就可以像普通模型一樣的用這個模型了。
例如我要查詢傳遞過來的ID的使用者的所有資訊 :
$map=array("id"=>$_GET["id"]); $res=$dao->find($map);可以看看查詢是否成功了。
dump($res);如果你現在要用DB_BBS的資料庫的表,只要再切換一次連線;
$dao->switchConnect(2);然後再選表格查詢。記住,切換模型後一定要再選一次表,不然會出錯。
之後又可以像普通模型那樣操作了。
下面針對手冊指出裡面存在的幾個問題:
2.addConnect()的參數在不同的版本是不同的,手冊中沒寫出來;
3.建立了空模型後需要選表,這個手冊裡沒有。
#
以上是如何解決ThinkPHP實作多資料庫連線的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)