3

我有一个项目,我必须在其中连接用户指定的数据库。我想以适当的 codeigniter 风格实现它,但我不知道我该怎么做 codeigniter 将数据库凭据存储在 database.php 文件中是否有任何方法可以使其动态化。或者有没有其他方法可以实现这一目标?我用谷歌搜索了它,但没有发现任何有用的东西。任何帮助和建议将不胜感激。

更新:
该项目是关于报告的。我有一个表单,在其中我获得了数据库登录凭据,然后生成有关其数据库的报告,一切都将在运行时完成。

4

3 回答 3

9

根据指南,您可以通过以下第三个参数手动传递数据库连接设置$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);
于 2012-07-24T01:52:50.057 回答
4

我知道这是一个老话题,但我一直在寻找这些信息,并相信其他人也可能需要。

如果您只需要在同一连接上使用不同的数据库,则不需要创建单独的数据库配置。您可以在需要时切换到不同的数据库,如下所示:

$this->db->db_select($database2_name)

这解决了我。

于 2016-03-18T01:42:48.907 回答
3

首先一句警告

应该注意,这可能不是推荐的最佳主意,除非您限制用户允许的数据库名称或不允许他们自己选择它。

如果第一种情况是必须的,请清理数据,如果您知道它定义的数据库名称列表.. 为他们提供一个列表并针对该列表进行验证。

话虽如此:

这是您描述的代码。我在我的控制器中执行此操作。并$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

于 2012-07-24T01:56:26.120 回答