首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 多數據庫連接實戰:跨服務器數據操作指南

     編輯:PHP 綜合知識

場景與挑戰

同一服務器多數據庫可用 $trueTableName = 'db_name.table_name' 簡單解決。但當數據庫分佈在不同服務器時,必須使用 ThinkPHP 的多數據庫連接特性。

核心步驟:配置、實例化、切換、操作

1. 配置文件中定義多組數據庫參數

return array(
    // 默認數據庫
    'DB_TYPE'   => 'mysql',
    'DB_HOST'   => 'localhost',
    'DB_NAME'   => 'news',
    'DB_USER'   => 'root',
    'DB_PWD'    => '123',
    'DB_PORT'   => '3306',
    'DB_PREFIX' => 'news_',

    // 額外連接 1:BBS 數據庫
    'DB_BBS' => array(
        'dbms'      => 'mysql',
        'username'  => 'discuz',
        'password'  => '123',
        'hostname'  => 'localhost',
        'hostport'  => '3306',
        'database'  => 'discuz'
    ),
    // 額外連接 2:NEWS 數據庫
    'DB_NEWS' => array(
        'dbms'      => 'mysql',
        'username'  => 'root',
        'password'  => '123',
        'hostname'  => 'localhost',
        'hostport'  => '3306',
        'database'  => 'news'
    )
);

隨後可用 C('DB_BBS')、C('DB_NEWS') 獲取配置數組。

2. 實例化空模型

避免默認數據庫無表報錯,使用空模型:

$dao = D();  // 或 new Model();

3. 添加額外數據庫連接

$dao->addConnect(C('DB_BBS'), 1, true);  // 連接編號 1
$dao->addConnect(C('DB_NEWS'), 2, true); // 連接編號 2

關鍵參數說明:

  • 第一參數:數據庫配置數組
  • 第二參數:連接編號(內置連接為 0,額外連接從 1 開始)
  • 第三參數(舊版):是否同類型數據庫,true 表示同為 MySQL

注意:ThinkPHP 1.0.3 與 1.0.4 版本 addConnect 參數不同,舊版有三個參數,新版去掉第三個,請根據版本調整。

4. 切換連接並操作

// 切換到 NEWS 數據庫(編號 2)
$dao->switchConnect(2);

// 必須指定完整表名(含前綴,因連接配置未含前綴)
$dao->table('cdb_members');

// 正常查詢
$map = array('id' => $_GET['id']);
$res = $dao->find($map);
dump($res);

重要: 每次 switchConnect 後必須重新 table() 指定表,否則會出錯。

5. 切換回 BBS 數據庫

$dao->switchConnect(1);
$dao->table('another_table');
// 繼續操作...

官方手冊常見坑點總結

  1. 實例化時建議用空模型 D(),非空模型易報錯
  2. addConnect 參數隨版本變化,手冊未及時更新
  3. 空模型需手動 table() 選表,手冊鮮少提及

結語

掌握「配置 → 空模型 → 添加連接 → 切換 → 選表 → 操作」流程,即可靈活應對跨服務器多數據庫場景。根據實際版本微調參數即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved