2009-03-11 16 views
31

database.phpでを使用する:CodeIgniterの - 複数のデータベースに

$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"; 

問題は、私が唯一の構成1 $active_group、デフォルト、または統計に定義することができます。私はCodeIgniterのドキュメントを踏襲し、私は、次の追加:

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

私は2番目のデータベースに接続します。この方法で、私は最初の1への接続を失います。誰もがどのように私はすべてのモデルのコンストラクタで次の操作を行うことなく、2つのデータベースを読み込むことができますどのようなアイデアを持っていますか?

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

よろしく、

ペドロ

答えて

24

は、代わりにカマチョで述べたようにハックを適用するので、あなたはまた、すべての接続のためにFALSEにdatabase.phpでのファイルの「pconnect'フラグを設定することができます。

+0

私は約CodeIgniterのアプリケーションで複数のデータベース接続を作成して記事を書く必要があります。見ていただきありがとうございますhttps://www.cloudways.com/blog/connect-multiple-databases-codeigniter/ –

4

私は、フレームワーク上DB_driver.phpを変更する問題を修正。

この関数では、$this->db_select();を追加し、2つのデータベースを操作するときに決して接続を失うことはありません。

function simple_query($sql) 
{ 
    if (! $this->conn_id) 
    { 
     $this->initialize(); 
    } 

    $this->db_select(); 

    return $this->_execute($sql); 
} 
5

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

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

$db['stats']['pconnect'] = FALSE; 
+0

私たちはdb_selectのfuntionでデータベース名を言及することができますか? –

3

をあなたはsession.phpファイル内の関数CI_Session()を修正してみてください。

はこのように、この

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

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

を交換し、あなたはすべてのモデルファイルで2つのDBSをロードする必要はありませんが、直接オブジェクトを使用してそれらを使用しなければなりません。

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


サンダー

29

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

は、この修正プログラムは、ここではPostgreSQLの

には適用されません**すると、そのサイトがダウンしただけの場合にはコピーです。

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

スタートデータベース呼び出しのすべてが同じデータベース(初期化され、最後の1)に行く

説明

をバグ修正

問題を解決するにはsimple_query機能を変更/システム/データベース/ DB_driver.php:あなたがモデルで、このようなものを行うことができますので

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); 
+0

CodeIgniterは2013年10月にまだこの不正なバグを示しており、この修正は機能しません。 –

+0

新しいプロジェクトを開始する場合は、FuelPHPの使用をお勧めします。 CodeIgniterを書いた多くの人々が、CodeIgniterを完全に書き直して再考しました。レガシープロジェクトに参加している場合、またはクライアントにCodeIgniterが必要な場合は、この修正が有効です。しかし、それを修正する別の方法がある場合は、ここで共有してください。ありがとう! – mrbinky3000

+0

これはCI(バージョン2.1.3)にも適用され、毎回db_select()を手動で呼び出すよりも優れています。 –

1

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

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

CodeIgbiter User Guide

関連する問題