我目前正在构建一个应用程序,用户可以输入自己的个人数据库连接来利用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。
答案 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类并使用会话类来定义详细信息?