Codeigniter:维护多个数据库连接数据的最佳做法是什么?

时间:2016-03-29 14:01:15

标签: codeigniter database-connection

我的典型发展模式是:

1 - local work machine 

2 - online testing server 

3 - production server. 

每个都有一个具有唯一连接数据的数据库。

因此,对于我的项目,我使用一个实现switch( what_environment ){ // assign appropriate db connection info }的配置文件,根据环境分配正确的数据库连接信息(主机,用户名,密码,数据库名称......)。

然而,在codeigniter的/config/database.php中,没有这样的构造,而只是一个属性集。显然我可以在那里放置我自己的服务器嗅探开关语句。但我认为有一种代码签名方式来处理这个问题。

任何人都可以了解维护多个数据库连接信息的正确codeigniter方式吗?

4 个答案:

答案 0 :(得分:1)

我不知道这是否是最好的解决方案,但是,它是最简单的实现方式,并且对我来说一直都很好:

宣布$ db ['默认']:

if (ENVIRONMENT == 'development'){
    $db['default']['username'] = 'root';
    $db['default']['password'] = 'XXXXX';
    $db['default']['database'] = 'developmentdatabasename';
}

我添加此代码:

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

在项目的index.php中:

var moment = require('moment-timezone');
var jun = moment("2014-06-01T12:00:00Z");
jun.tz('America/New_York').format('ddd MMM DD YYYY HH:mm:ss');

答案 1 :(得分:1)

在你的应用程序/ config / constants.php上写:

define('ENVIRONMENT', 'development'); 


switch(ENVIRONMENT):

case 'development': 
# DB 
defined('DB_HOST')      ? null : define('DB_HOST', 'localhost');
defined('DB_USER')      ? null : define('DB_USER', 'root');
defined('DB_PASSWORD')  ? null : define('DB_PASSWORD', '');
defined('DB_NAME')      ? null : define('DB_NAME', 'dev_db');
break; 

case 'production': 
# DB 
defined('DB_HOST')      ? null : define('DB_HOST', 'production');
defined('DB_USER')      ? null : define('DB_USER', 'production_user');
defined('DB_PASSWORD')  ? null : define('DB_PASSWORD', '12345');
defined('DB_NAME')      ? null : define('DB_NAME', 'production_db');
break; 

endswitch;

然后在你的应用程序/ config / database.php

$db['default'] = array(

    'hostname' => DB_HOST,
    'username' => DB_USER,
    'password' => DB_PASSWORD,
    'database' => DB_NAME,

);

答案 2 :(得分:1)

如果你使用apache - 激活SetEnvIf(如果它已经没有了)

之后放入你的htaccess

SetEnvIf Host localhost$ CI_ENV=development
SetEnvIf Host testhost$ CI_ENV=testing
SetEnvIf Host productionhost$ CI_ENV=production

现在只需在您的application / config / folder 3文件夹中创建名为开发,测试和生产的文件夹

如果您现在将不同的配置文件放在此文件夹中 - ci根据您当前的工作环境访问它

请按照CI Documentation了解更多信息

答案 3 :(得分:1)

在config / database.php中,您可以设置多个这样的环境

$active_group = 'local';
if(ENVIRONMENT=='development')
{
   $active_group = 'online';
}
elseif(ENVIRONMENT=='production')
{
   $active_group = 'production';
}
$db['local'] = array(
'dsn'   => '',
'hostname' => 'xxxx',
'username' => '',
//other configs
);
$db['online'] = array(
'dsn'   => '',
//other configs
);
$db['production'] = array(
'dsn'   => '',
//other configs
);

你可以做很多事情。见documentation