我有一个项目,我必须在其中连接用户指定的数据库。我想以适当的 codeigniter 风格实现它,但我不知道我该怎么做 codeigniter 将数据库凭据存储在 database.php 文件中是否有任何方法可以使其动态化。或者有没有其他方法可以实现这一目标?我用谷歌搜索了它,但没有发现任何有用的东西。任何帮助和建议将不胜感激。
更新:
该项目是关于报告的。我有一个表单,在其中我获得了数据库登录凭据,然后生成有关其数据库的报告,一切都将在运行时完成。
我有一个项目,我必须在其中连接用户指定的数据库。我想以适当的 codeigniter 风格实现它,但我不知道我该怎么做 codeigniter 将数据库凭据存储在 database.php 文件中是否有任何方法可以使其动态化。或者有没有其他方法可以实现这一目标?我用谷歌搜索了它,但没有发现任何有用的东西。任何帮助和建议将不胜感激。
更新:
该项目是关于报告的。我有一个表单,在其中我获得了数据库登录凭据,然后生成有关其数据库的报告,一切都将在运行时完成。
根据指南,您可以通过以下第三个参数手动传递数据库连接设置$this->load->model
:
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);
// or as gorelative notes, to access multiple databases:
$DB2 = $this->load->database($config, TRUE);
我知道这是一个老话题,但我一直在寻找这些信息,并相信其他人也可能需要。
如果您只需要在同一连接上使用不同的数据库,则不需要创建单独的数据库配置。您可以在需要时切换到不同的数据库,如下所示:
$this->db->db_select($database2_name)
这解决了我。
应该注意,这可能不是推荐的最佳主意,除非您限制用户允许的数据库名称或不允许他们自己选择它。
如果第一种情况是必须的,请清理数据,如果您知道它定义的数据库名称列表.. 为他们提供一个列表并针对该列表进行验证。
这是您描述的代码。我在我的控制器中执行此操作。并$db2->
在我的模型中参考。
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = $customUserDatabase;
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$DB2 = $this->load->database($config);
$q = $DB2->where('id', 13)->get('tablename');
if( $q->num_rows() > 0 ){
return $q->result();
}else{
return false;
}
http://codeigniter.com/user_guide/database/connecting.html
参考关于连接多个数据库的部分...
连接到多个数据库
如果您需要同时连接到多个数据库,您可以这样做:
$DB1 = $this->load->database('group_one', TRUE); $DB2 = $this->load->database('group_two', TRUE);
注意:将单词“group_one”和“group_two”更改为您要连接到的特定组名称(或者您可以传递上述连接值)。
通过将第二个参数设置为 TRUE(布尔值),函数将返回数据库对象。
当您以这种方式连接时,您将使用您的对象名称而不是本指南中使用的语法来发出命令。换句话说,而不是发出命令:
$this->db->query(); $this->db->result(); etc...
您将改为使用:
$DB1->query(); $DB1->result(); etc...
我使用这个完全相同的功能放置了我的控制器/模型的片段。我需要跨多个数据库使用相同的凭据/配置连接到多个数据库。因此,我可以$this->db->
用来获取配置。
你可以在这里看到它的要点:https ://gist.github.com/08a4f45da1ff7e177425