Codeigniter - 多个数据库连接 - 本地和远程

时间:2012-03-04 19:21:19

标签: php mysql database codeigniter

我目前正在构建一个应用程序,用户可以输入自己的个人数据库连接来利用MySQL数据库中的数据。

这意味着我将拥有两个数据库连接 - 我的本地(管理会话等)和远程用户。

有人可以建议管理这两个连接的最佳方法吗?我查看了数据库组 - http://codeigniter.com/user_guide/database/connecting.html但是用户数据库连接将由会话变量设置,因此我无法将远程数据库的详细信息放在配置文件中。

我尝试在我的班级中手动设置一个新的数据库组,如:

        $db['foreign']['hostname'] = $this->session->userdata('hostname');
        $db['foreign']['username'] = $this->session->userdata('dbuser');
        $db['foreign']['password'] = $this->session->userdata('dbpassword');
        $db['foreign']['database'] = $this->session->userdata('dbname');
        $db['foreign']['dbdriver'] = "mysql";
        $db['foreign']['dbprefix'] = "";
        $db['foreign']['pconnect'] = FALSE;
        $db['foreign']['db_debug'] = TRUE;
        $db['foreign']['cache_on'] = FALSE;
        $db['foreign']['cachedir'] = "";
        $db['foreign']['char_set'] = "utf8";
        $db['foreign']['dbcollat'] = "utf8_general_ci";

        $foreign_db = $this->load->database('foreign', TRUE);

但我在载重线上遇到异常:

You have specified an invalid database connection group.

有人可以建议我如何实现这个目标吗?

非常感谢,Ben。

3 个答案:

答案 0 :(得分:3)

为了使用组调用语法,必须在配置文件中定义组。 CI包括将配置直接传递给数据库加载器的功能。 (注意:这可能只是CI 2+功能)

你想要这样的东西:

$db['hostname'] = $this->session->userdata('hostname');
$db['username'] = $this->session->userdata('dbuser');
$db['password'] = $this->session->userdata('dbpassword');
$db['database'] = $this->session->userdata('dbname');
$db['dbdriver'] = "mysql";
$db['dbprefix'] = "";
$db['pconnect'] = FALSE;
$db['db_debug'] = TRUE;
$db['cache_on'] = FALSE;
$db['cachedir'] = "";
$db['char_set'] = "utf8";
$db['dbcollat'] = "utf8_general_ci";

$foreign_db = $this->load->database($db, TRUE);

答案 1 :(得分:0)

系统在您尝试加载它时可能不知道“外国”组。

您不应在配置文件中加载任何内容;这不是配置文件的用途,这基本上就是问题所在。

如果您确实需要自动加载外部数据库,请按extending the CI controller执行并将其加载到其构造中。

答案 2 :(得分:0)

您可以使用钩子来获取会话变量并填充配置变量预连接。

否则您可以从控制器手动调用第二个DB类并使用会话类来定义详细信息?