2017-04-26 2 views
-1

codeigniterで1つのマスタと複数のスレーブデータベース(動的に)にアクセスしたい。Codeigniterで複数のダイナミックデータベースにアクセスする方法

すべてのスレーブデータベースの接続文字列がmasterデータベースに格納されます。 database.phpファイルのmasterデータベースにアクセスする方法。またはこれを行う他の方法がありますか?事前に

$db['default']['dbname_prefix'] = $dbname_prefix; 
$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = $username_prefix.'root'; 
$db['default']['password'] = ''; 
$db['default']['database'] = $db_name; 
$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['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 
$db['default']['_protect_identifiers']= FALSE; 

$db['msdb']['dbname_prefix'] = ''; 
$db['msdb']['hostname'] = 'should_be_come_from_first_database'; 
$db['msdb']['username'] = 'should_be_come_from_first_database'; 
$db['msdb']['password'] = 'should_be_come_from_first_database'; 
$db['msdb']['database'] = 'should_be_come_from_first_database'; 
$db['msdb']['dbdriver'] = 'mssql'; 

おかげで、あなたは$db['default']があなたのデフォルトのデータベースになります言及何

+2

MySQL <> SQL Server、どちらを使用していますか? – Chuck

+1

[Codeigniter Documentation](https://www.codeigniter.com/userguide3/database/connecting.html#connecting-to-multiple-databases)をお読みになりましたか? –

+0

両方、Master dbはmysql上で実行され、他のすべてのslave dbはSQLサーバ上で実行されます –

答えて

0

。あなたがコードでmsdbにアクセスする必要がある場合は、手動でDB接続を設定している場合は、試すことができますについてConnecting to Multiple Databases - codeigniter.com/userguide3


を読むこの

$db = $this->load->database('msdb', TRUE); 
$query = $db->select('*')->get('tablename'); 

ようにしなければならない

$config['hostname'] = 'localhost'; 
$config['username'] = 'myusername'; 
$config['password'] = 'mypassword'; 
$config['database'] = 'mydatabase'; 
$config['dbdriver'] = 'mysqli'; 
$config['dbprefix'] = ''; 
$config['pconnect'] = FALSE; 
$config['db_debug'] = TRUE; 
$config['cache_on'] = FALSE; 
$config['cachedir'] = ''; 
$config['char_set'] = 'utf8'; 
$config['dbcollat'] = 'utf8_general_ci'; 
$this->load->database($config); 

Note : you can't set values inside database.php from outside. You're only able to access it in your Controller/Model

+0

これは動作しません。 confファイルにインスタンスをロードせずにCIオブジェクトにアクセスすることはできません。 – Kisaragi

+0

** lolそれを読んでください。**ヘルパーなどでロードしたくないです。データベース設定はコントローラ内にあります。 :P –

+0

元の質問から: "database.phpファイルのmasterデータベースにアクセスする方法"。 – Kisaragi

0

資格情報を設定するだけではどうですか?さて、ここでの方法です:

新しいヘルパーファイルを作成します。あなたのデシベルの設定でDb_helper.php:

function get_other_db_column_value($other_column) 
{ 
    $ci =& get_instance(); //get the ci instance 
    $ci->load->database(); // load default db; 
    $ci->db->select($other_column).....//select the column value you want 
    ... 
} 

を:

$ci =& get_instance(); 
$ci->load->helper('Db'); //created above 
$db['msdb']['hostname'] = get_other_db_column_value('hostname'); 
+0

が機能していないと、 と表示されます。致命的なエラー:文字列のメンバー関数select()を呼び出す –

+0

select文で使用する文字列の例を投稿してください。 – Kisaragi

0
$db['msdb']['dbname_prefix'] = ''; 
$db['msdb']['hostname'] = $db['default']['hostname']; 
$db['msdb']['username'] = $db['default']['username']; 
$db['msdb']['password'] = $db['default']['password']; 
$db['msdb']['database'] = $db['default']['database']; 
$db['msdb']['dbdriver'] = 'mssql'; 

は、あなたが何をしたいということですか?

database.phpは通常のPHPファイルで、$dbは通常の配列です。すぐにアクセスできます。これはコードの上にあることです。 $db['default']を使用して、$db['msdb']プロパティの一部を定義します。

関連する問題