8

有人知道在我的应用程序中使用 2 个不同数据库的最佳实践吗?

我需要将数据存储在两个不同位置的数据库中(主机、用户名、密码,都发生了变化)。

我打算像往常一样创建模型,并在构造中设置数据库主机、名称、密码等。

4

4 回答 4

18

我不确定您是否称其为“最佳”方式,但是如教程中所述,一种方式是这样的,

在数据库文件中,您有默认配置,其中一部分是:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "user";
$db['default']['password'] = "database";
$db['default']['database'] = "db1";

现在您可以创建另一个组,假设我们将其称为 group1,并且我们希望它除了名称之外的所有内容都与默认数据库设置相同,所以您可以这样做

$db['group1']=$db['default'];
$db['group1']['database']="db2";

然后,当你想使用第二个数据库时,就去吧

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

然后,而不是$this->db->foo(),你会做$DB2->foo()

或者(如 sbaaaang 评论中所建议的那样),您可以$this->db=$DB2;保持一切不变

你可以把它扩展到像这样的多个组

 $DB1 = $this->load->database('group1', TRUE); 
 $DB2 = $this->load->database('group2', TRUE); 
 ...
 $DBn = $this->load->database('groupn', TRUE); 
于 2012-10-07T09:34:22.057 回答
4

好吧,我只想在这里写下我的解决方案,因为我认为我使用的代码更少:

在 database.php 中,我设置了数据库组,例如:

$database['default']['dbname'] = 'db1';
$database['second_db']['dbname'] = 'db2';

然后在模型中我使用构造函数切换到我想像这样使用的数据库:

//use db1
function __construct()
    {
        // Call the Model constructor
        parent::__construct();
         $this->load->database('default',true);
    }
//use db2
function __construct()
    {
        // Call the Model constructor
        parent::__construct();
         $this->load->database('second_db',true);
    }

如果有人想展示更多解决方案,请这样做!这些只是我的两分钱。

于 2012-10-13T19:36:15.363 回答
4

我读到了

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

必须是假的才能使这些东西起作用。如果我错了,请纠正我。对于您使用的所有多个数据库,它必须关闭。我不知道这是否是一个好的解决方案。

于 2012-11-28T22:43:28.793 回答
0

试过这个,它的工作原理:

$db['otherdb'] = array_merge($db['primarydb'], array(

    'database' => 'otherdbname'

));
于 2017-01-06T12:15:48.553 回答