32

データベース.php :

$db['default']['hostname'] = "192.168.2.104";
$db['default']['username'] = "webuser";
$db['default']['password'] = "----";
$db['default']['database'] = "vad";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

$db['stats']['hostname'] = "192.168.2.104";
$db['stats']['username'] = "webuser";
$db['stats']['password'] = "---";
$db['stats']['database'] = "vad_stats";
$db['stats']['dbdriver'] = "mysql";
$db['stats']['dbprefix'] = "";
$db['stats']['pconnect'] = TRUE;
$db['stats']['db_debug'] = TRUE;
$db['stats']['cache_on'] = FALSE;
$db['stats']['cachedir'] = "";
$db['stats']['char_set'] = "utf8";
$db['stats']['dbcollat'] = "utf8_general_ci";

$active_group問題は、構成 one 、 default 、または stats でしか定義できないこと です。CodeIgniter のドキュメントに従い、以下を追加しました。

$DB2 = $this->load->database('stats', TRUE);

この方法で 2 番目のデータベースに接続しますが、最初のデータベースへの接続が失われます。すべてのモデル コンストラクターで次の操作を行わなくても、2 つのデータベースをロードする方法について何か考えがある人はいますか?

$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE); 

よろしく、

ペドロ

4

6 に答える 6

29

codeigniter にバグがあります。クラスに1行挿入すると、すべてが修正されます。元のソースは次のとおりです: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/

** この修正は PostgreSQL には適用されません

そのサイトがダウンした場合に備えて、ここにコピーがあります。

行番号が変更されました。codeigniter からのバグ修正は次のとおりです。

バグ修正を開始

説明

すべてのデータベース呼び出しは同じデータベースに送られます (最後に初期化されたもの)

この問題を修正するには、/system/database/DB_driver.php の simple_query 関数を変更します。

function simple_query($sql)
{
    if ( ! $this->conn_id)
    {
        $this->initialize();
    }
   
    $this->db_select(); //<-----------------  Added this line
    return $this->_execute($sql);
}

これで問題が完全に修正されるので、モデルでこのようなことができます

$this->legacy_db = $this->load->database('legacy', true);
于 2011-01-12T22:01:36.880 に答える
5

現在、codeigniter は永続接続で複数のデータベースに接続できません。そのため、接続の永続化を無効にする必要があります。あなたはこれを行うことができます..

$db['default']['pconnect'] = FALSE;

$db['stats']['pconnect'] = FALSE;
于 2010-07-06T08:16:51.610 に答える
3

session.php ファイルの関数 CI_Session() を変更してみてください。

交換

$this->CI->load->database();

これとともに

$this->CI->db1 = $this->CI->load->database('default', TRUE);
$this->CI->db2 = $this->CI->load->database('db2', TRUE);

このように、すべてのモデル ファイルに 2 つのデータベースをロードする必要はありませんが、オブジェクトを使用して直接使用する必要があります。

$this->db1はデフォルト グループ db にアクセスし、$this->db2は db2 グループ db にアクセスします。(両方の db グループが database.php で定義されている必要があります)


サンダー

于 2010-10-14T05:50:33.850 に答える
1

同じ接続で別のデータベースを使用するだけでよい場合は、別のデータベース構成を作成する必要はありません。次のように、必要に応じて別のデータベースに切り替えることができます。

$this->db->db_select($database2_name);

CodeIgbiter ユーザーガイド

于 2016-11-24T00:33:31.693 に答える