0

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

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

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

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

问题是这会重置默认数据库并关闭“city_db”并尝试重新连接默认数据库将不起作用(可能是最愚蠢的事情,但我没有任何其他想法!)

请帮忙。

谢谢。

4

4 回答 4

2

文档中:

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

$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();
于 2012-06-18T12:46:17.253 回答
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);
于 2012-06-18T12:56:12.567 回答
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');
于 2017-05-19T09:49:19.510 回答
0

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

$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'] 如下

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

然后对于默认数据库,您只需在加载数据库后进行正常查询。

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

用于加载 another_db 并进行查询,

$another_db= $this->load->database('another_db', TRUE);
$another_db->query($sql); 
$another_db->result();  
于 2017-05-19T09:14:02.750 回答