在php和codeigniter中使用单个应用程序的多个数据库

时间:2010-05-04 17:56:37

标签: php codeigniter

我在php codeigniter中开发了一个网站,其想法是使用代码的单个物理实例。

这里我想要的逻辑是登录页面用户将选择将在数据库名称内部的companyid。 我想知道如何根据用户在登录时选择的公司ID更新active_group变量。

有没有办法这样做。

1 个答案:

答案 0 :(得分:2)

您需要拥有一个主数据库来进行用户身份验证并保存信息吗?所以你需要管理两个连接。您可以在那里使用默认连接,然后在MY_Controller中设置第二个配置。

这个MY_Controller会处理用户检测(来自自动加载的数据库类和你正在使用的任何模型/ lib / auth系统),然后它当然会从用户那里获取数据库名称,但它可能会附加。

然后,您可以使用这样的代码来设置第二个db:

class  MY_Controller extends Controller
{
    function MY_Controller ()  {

        parent::Controller();

        $this->user = $this->auth->get_user($this->input->post('username'), $this->input->post('password'));
        $this->company = $this->company->get($this->input->post('company_id'));

        $config['hostname'] = "localhost";
        $config['username'] = "myusername";
        $config['password'] = "mypassword";
        $config['database'] = $this->company->database;
        $config['dbdriver'] = "mysql";
        $config['dbprefix'] = "";
        $config['pconnect'] = FALSE;
        $config['db_debug'] = TRUE;
        $config['cache_on'] = FALSE;
        $config['cachedir'] = "";
        $config['char_set'] = "utf8";
        $config['dbcollat'] = "utf8_general_ci";

        $this->company_db = $this->load->database($config, TRUE);
    }

}

然后,您可以与$ this-> company_db以及$ this-> db进行互动。前者用于与其数据库的数据库交互,后者用于与主要默认连接进行交互。