Codeigniter:维护多个数据库连接数据的最佳实践是什么



我的典型开发模式是:

1 - local work machine 
2 - online testing server 
3 - production server. 

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

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

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

有人能阐明维护多个数据库连接信息的正确代码点火器方法吗?

在您的应用程序/config/contents.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,
);

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

$db声明之后["默认"]:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => '...',
    'password' => '...',
    ...
);

我添加这个代码:

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

在你的项目的index.php中:

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

如果您使用apache-激活SetEnvIf(如果还没有)

之后放入你的htaccess

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

现在只需在您的application/config/folder3文件夹中创建一个名为development,testing and production 的文件夹

如果你现在把不同的配置文件放在这个文件夹中,ci会根据你当前的工作环境访问它

有关更多信息,请参阅CI文档。

在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
);

你可以用很多方法。请参阅文档

相关内容

最新更新