在Codeigniter中使用多个MySQL数据库?

时间:2012-06-18 12:40:34

标签: php mysql codeigniter

我有多个基于CI的网站,他们都使用自己的默认数据库,工作得很好。

现在我有一个要求,其中一个网站连接到另一个网站的数据库以获取一些信息(它们在同一台服务器上),但维护本机数据库连接。

我正在使用以下代码连接到其他网站数据库

$dsn = 'mysql://econnect_base_user:econnect_base_pass@localhost/econnect_base_db';
$city_db = $this->load->database($dsn, TRUE);

问题是这会重置默认数据库并关闭'city_db'并尝试重新连接默认数据库将无法工作(可能是最糟糕的事情,但我没有任何其他想法!)

请帮忙。

感谢。

4 个答案:

答案 0 :(得分:2)

来自documentation

  

如果您需要同时连接到多个数据库   可以这样做:

$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
     

注意:将单词“group_one”和“group_two”更改为具体   您要连接的组名(或者您可以传递连接   值如上所示。)

     

通过将第二个参数设置为TRUE(布尔值),函数将会   返回数据库对象。

     

以这种方式连接时,您将使用您的对象名称进行发布   命令而不是本指南中使用的语法。其他   单词,而不是发出命令:

$this->db->query(); 
$this->db->result(); 
//etc...
     

您将使用:

$DB1->query(); 
$DB1->result();

答案 1 :(得分:0)

只需使用普通的php db:

$other_dbh = new PDO("mysql:host=localhost;dbname=$other_db_name", $other_db_user, $other_db_pass);
foreach ($other_dbh->query('SELECT * from FOO') as $row)
    process_info($row);

答案 2 :(得分:0)

首先在config / database.php中设置两个数据库连接。默认情况下,您将看到以下内容。

$current_year = the_date( 'Y' );

$args = array(
    'post_type' => 'issue_number',
    'posts_per_page' => 13, 
    'paged' => $paged,  
    'year' => $current_year
);

将另一个数据库连接设置添加为$ db ['another_db'],如下所示

$active_group = 'default';
    $active_record = TRUE;
    $db['default']['hostname'] = '';
    $db['default']['username'] = '';
    $db['default']['password'] = '';
    $db['default']['database'] = '';
    $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['another_db']['hostname'] = '';
    $db['another_db']['username'] = '';
    $db['another_db']['password'] = '';
    $db['another_db']['database'] = '';
    $db['another_db']['dbdriver'] = 'mysql';
    $db['another_db']['dbprefix'] = '';
    $db['another_db']['pconnect'] = TRUE;
    $db['another_db']['db_debug'] = TRUE;
    $db['another_db']['cache_on'] = FALSE;
    $db['another_db']['cachedir'] = '';
    $db['another_db']['char_set'] = 'utf8';
    $db['another_db']['dbcollat'] = 'utf8_general_ci';
    $db['another_db']['swap_pre'] = '';
    $db['another_db']['autoinit'] = TRUE;
    $db['another_db']['stricton'] = FALSE;

用于加载another_db并进行查询,

$this->load->database();
$this->db->query($sql); 
$this->db->result();  

答案 3 :(得分:0)

在config / database.php中包含此代码 希望这对你有用。

$active_group = 'default';
$active_record = TRUE;

// first db configuration
$db['default']['hostname'] = 'localhost'; // Hostname
$db['default']['username'] = 'root'; // username
$db['default']['password'] = ''; // password
$db['default']['database'] = 'first_db'; // replace your database name
$db['default']['dbdriver'] = 'mysqli';
$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;


// second db configuration
$db['db2']['hostname'] = 'localhost'; // Hostname
$db['db2']['username'] = 'root'; // username
$db['db2']['password'] = ''; // password
$db['db2']['database'] = 'second_db'; // replace your database name
$db['db2']['dbdriver'] = 'mysqli';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = FALSE;
$db['db2']['db_debug'] = TRUE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;

您可以通过加载数据库

在任何地方使用这两个数据库
$this->load->database();
$this->db->database;
$this->db->database2;
$this->db->query('your query');