2017-04-26 50 views
-1

我想在codeigniter中(动态)访问一个主数据库和多个从数据库。如何访问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'; 

由于提前,

+2

MySQL <> SQL Server,您正在使用哪一个? – Chuck

+1

您是否阅读过[Codeigniter文档](https://www.codeigniter.com/userguide3/database/connecting.html#connecting-to-multiple-databases)? –

+0

两者,主数据库运行在MySQL和所有其他从数据库在SQL服务器上运行 –

回答

0

你提什么$db['default']将是您的默认数据库。如果您需要访问msdb在代码中你必须做这样的

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

阅读Connecting to Multiple Databases - codeigniter.com/userguide3


如果你手动设置数据库连接,你可以尝试

$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

这是行不通的。你不能访问配置文件对象而不加载配置文件中的实例 – Kisaragi

+0

**大声笑阅读。**我不希望它加载到助手或任何其他。数据库设置在Controller中。 :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']属性。