如何在ci中使用控制器配置数据库?

时间:2015-01-27 10:01:47

标签: php codeigniter

有没有办法使用controller中的codeigniter重新配置数据库?

假设我在数据库配置中有这段代码

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'db';

然后我想改成这个

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'admin';
$db['default']['password'] = 'password';
$db['default']['database'] = 'db_admin';

controller中使用codeigniter。这可能吗?

3 个答案:

答案 0 :(得分:0)

您可以在database.php文件夹中的config中定义多个数据库,例如

//database 1 details
$db['db1']['hostname'] = 'localhost';
$db['db1']['username'] = 'root';
$db['db1']['password'] = '';
$db['db1']['database'] = 'db';

//database 2 details
$db['db2']['hostname'] = 'localhost';
$db['db2']['username'] = 'admin';
$db['db2']['password'] = 'password';
$db['db2']['database'] = 'db_admin';

您可以按照以下脚本连接到所需的数据库

if(condition){
    $DB = $this->load->database('db1', TRUE);
}
else{
    $DB = $this->load->database('db2', TRUE);
}

当你连接这样的数据库时,你必须使用你的对象名$DB而不是$this

$DB->query();
$DB->result();

而不是

$this->db->query();
$this->db->result();

了解更多details

答案 1 :(得分:0)

是的,你可以这样做。在控制器功能内部指定条件,然后添加以下代码:

$config['hostname'] = "localhost";
$config['username'] = "admin";
$config['password'] = "password";
$config['database'] = "db_admin";

$this->load->database($config);

现在您可以访问新的数据库配置。同样禁用缓存,

$db['default']['cache_on'] = FALSE;

在config文件夹中的database.php文件中。

希望它有所帮助。

答案 2 :(得分:0)

看起来我找到了解决方案。不知道是不是更好。但它总比没有好。

我试过了

$config['hostname'] = "localhost";
$config['username'] = "admin";
$config['password'] = "password";
$config['database'] = "db_admin";

$this->load->database($config);

并尝试了很多方法..但它总是从database文件夹

调用config

然后我找到了这个基本的php方法来调用database我想要的

像这样

$dbname = 'my_db';
$mysqli = new mysqli("localhost", "root", "", $dbname);

$result = $mysqli->query("query")`  
$result->close();

我知道我是多么愚蠢,答案多么愚蠢......但它总比没有好哈哈哈哈哈哈