Codeigniter:使用数据库存储多个用户的数据库名称

时间:2016-07-22 23:42:37

标签: php mysql database codeigniter

使用Codeigniter 3.0.6

到目前为止,我一直在使用Codeigniter的标准设置。我有一个数据库,所有连接都很好。我遇到问题的一个问题是,我想添加一个' global_accounts'数据库,根据当前登录的用户,将选择要加载的数据库。

Global_Accounts
--------------------------------------------------------
user             | coolUser                    | user2
pass             | coolPassword                | passy
url              | coolestsite.mysite.com      | u2.mysite.com
database_name    | coolestsite_application_db  | u2_application_db

就我而言,应用程序数据/架构并不重要。我想要的(我将要设置,但超出此问题的范围)是用户注册时,他们将填写用户,传递和URL,并将自动创建db_name。然后,该脚本将使用该名称创建一个新数据库,为该用户创建应用程序数据库的空白副本。

所以现在,我们正在对其进行硬编码,因此我们可以假设它的工作正常。

我想要的是Codeigniter的database.php文件:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'mysite.com',
    'username' => 'root',
    'password' => 'pass',
    'database' => 'coolsite_application_db'
    ...etc
);

我希望能够做到这样的事情,而不是硬编码这个文件:

$db['global'] = array(
    'dsn'   => '',
    'hostname' => 'mysite.com',
    'username' => 'root',
    'password' => 'pass',
    'database' => 'global_accounts'
    ...
);

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'mysite.com',
    'username' => 'root',
    'password' => 'pass',
    'database' => $this->db['global']->get_db_name($loggedInUserId);
    ...etc
);

希望这很有意义 - 我需要根据登录用户获取数据库名称。显然我需要建立一个模型或只是一个函数来抓住它,但问题是在哪里?我是否添加模型,连接到全局数据库,然后在数据库配置中加载模型?有没有其他更容易,更有成效的方法来做到这一点,还是这样呢?是否可以从codeigniter配置文件中调用codeigniter核心文件?

1 个答案:

答案 0 :(得分:0)

使用2个数据库连接。 1表示全局用户帐户,1表示实际用户数据库。然后创建一个帮助函数来获取用户数据库。只是一个想法。