database.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
、デフォルト、または統計。 CodeIgniterのドキュメントに従い、以下を追加しました。
$DB2 = $this->load->database('stats', TRUE);
この方法で2番目のデータベースに接続しますが、最初のデータベースへの接続は失われます。すべてのモデルコンストラクターで次の操作を行わずに、2つのデータベースをロードする方法について誰か考えがありますか?
$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE);
よろしく、
ペドロ
Camachoが述べたようにハックを適用する代わりに、すべての接続に対してdatabase.phpファイルの「pconnect」フラグをFALSEに設定することもできます。
Codeigniterにバグがあります。クラスに1行挿入すると、全体が修正されます。元のソースは次のとおりです。 http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/
**この修正はPostgreSQLには適用されません
そのサイトがダウンした場合に備えて、コピーを次に示します。
行番号が変更されました。 codeigniterからのバグ修正は次のとおりです。
説明
すべてのデータベース呼び出しが同じデータベースに送信されます(最後の1つが初期化されます)
問題を修正するには、/ 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);
現在、codeigniterは持続接続で複数のデータベースに接続できません。そのため、接続の永続化をオフにする必要があります。これを行うことができます。
$db['default']['pconnect'] = FALSE;
$db['stats']['pconnect'] = FALSE;
フレームワークのDB_driver.phpを変更する問題を修正します。
この関数に$this->db_select();
を追加すると、2つのデータベースを操作するときに接続が失われることはありません。
function simple_query($sql)
{
if ( ! $this->conn_id)
{
$this->initialize();
}
$this->db_select();
return $this->_execute($sql);
}
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つのdbをロードする必要はありませんが、オブジェクトを使用して直接使用します。
$ this-> db1はデフォルトのグループdbにアクセスし、$ this-> db2はdb2グループdbにアクセスします。 (両方のdbグループがdatabase.phpで定義されている必要があります)
スンダ
同じ接続で異なるデータベースのみを使用する必要がある場合、個別のデータベース構成を作成する必要はありません。必要に応じて、次のように別のデータベースに切り替えることができます。
$ this-> db-> db_select($ database2_name);