【问题标题】:Codeigniter - best way to use two different databaseCodeigniter - 使用两个不同数据库的最佳方式
【发布时间】:2012-09-27 20:53:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: php database codeigniter codeigniter-2


    【解决方案1】:

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

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

    $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 在 cmets 中建议的那样),您可以使用 $this->db=$DB2; 来保持一切不变

    您可以将其扩展到多个这样的组

     $DB1 = $this->load->database('group1', TRUE); 
     $DB2 = $this->load->database('group2', TRUE); 
     ...
     $DBn = $this->load->database('groupn', TRUE); 
    

    【讨论】:

    • 我觉得没问题,那么我可以设置 db 组在模型构造中使用
    • $this->db = $this->load->database('group1',TRUE);
    • 这看起来不错。但是没有一种简单的方法来更改数据库名称而不是整个配置。像我们在核心 php 中使用的东西,mysql_select_db(dbname)。就我而言,我只需要更改数据库名称,我所有的数据库都在同一台服务器上。
    【解决方案2】:

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

    在 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);
        }
    

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

    【讨论】:

    • 有一个问题,当在控制器中加载 2 个模型时,加载的第一个模型将数据库设置为也用于第二个加载,并且如果加载的第二个模型在 __construct 中具有不同的数据库,所以..如果有人能帮我解决这个问题,我想我们真的是!
    【解决方案3】:

    我读到了

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

    必须为 false 才能使这些东西起作用。如果我错了,请纠正我。对于您使用的所有多个数据库,它必须关闭。不知道这算不算好的解决办法。

    【讨论】:

      【解决方案4】:

      试过了,效果不错:

      $db['otherdb'] = array_merge($db['primarydb'], array(
      
          'database' => 'otherdbname'
      
      ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        相关资源
        最近更新 更多