Codeigniter:维护多个数据库连接数据的最佳实践是什么?
Codeigniter: What is the best practice to maintain multiple database connection datas?
我的典型开发模式是:
1 - local work machine
2 - online testing server
3 - production server.
其中每一个都有一个包含唯一连接数据的数据库。
因此,对于我的项目,我使用一个配置文件来实现 switch( what_environment ){ // assign appropriate db connection info }
,根据环境分配正确的数据库连接信息(主机、用户名、密码、数据库名称...)。
但是在 codeigniter 的 /config/database.php
中,没有这样的构造,而只有 一个 属性集。显然我可以把我自己的服务器嗅探开关语句放在那里。但我假设有一种 codeigniter 方法可以处理这个问题。
任何人都可以阐明维护多个数据库连接信息的正确 codeigniter 方法吗?
我不知道这是否是最好的解决方案,但是,它是最简单的实施方式,而且对我来说一直很有效:
$db声明后['default']:
$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');
在你的 application/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;
然后在你的 application/config/database.php
$db['default'] = array(
'hostname' => DB_HOST,
'username' => DB_USER,
'password' => DB_PASSWORD,
'database' => DB_NAME,
);
如果您使用 apache - 激活 SetEnvIf(如果它尚未激活)
然后输入你的 htaccess
SetEnvIf Host localhost$ CI_ENV=development
SetEnvIf Host testhost$ CI_ENV=testing
SetEnvIf Host productionhost$ CI_ENV=production
现在只需在您的 application/config/ 文件夹中创建名为 development、testing 和 production 的文件夹 3
如果您现在将不同的配置文件放在这个文件夹中 - ci 根据您当前的工作环境访问它
请关注CI Documentation获取更多信息
在你的 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
);
你可以做很多次 way.See documentation
我的典型开发模式是:
1 - local work machine
2 - online testing server
3 - production server.
其中每一个都有一个包含唯一连接数据的数据库。
因此,对于我的项目,我使用一个配置文件来实现 switch( what_environment ){ // assign appropriate db connection info }
,根据环境分配正确的数据库连接信息(主机、用户名、密码、数据库名称...)。
但是在 codeigniter 的 /config/database.php
中,没有这样的构造,而只有 一个 属性集。显然我可以把我自己的服务器嗅探开关语句放在那里。但我假设有一种 codeigniter 方法可以处理这个问题。
任何人都可以阐明维护多个数据库连接信息的正确 codeigniter 方法吗?
我不知道这是否是最好的解决方案,但是,它是最简单的实施方式,而且对我来说一直很有效:
$db声明后['default']:
$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');
在你的 application/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;
然后在你的 application/config/database.php
$db['default'] = array(
'hostname' => DB_HOST,
'username' => DB_USER,
'password' => DB_PASSWORD,
'database' => DB_NAME,
);
如果您使用 apache - 激活 SetEnvIf(如果它尚未激活)
然后输入你的 htaccess
SetEnvIf Host localhost$ CI_ENV=development
SetEnvIf Host testhost$ CI_ENV=testing
SetEnvIf Host productionhost$ CI_ENV=production
现在只需在您的 application/config/ 文件夹中创建名为 development、testing 和 production 的文件夹 3
如果您现在将不同的配置文件放在这个文件夹中 - ci 根据您当前的工作环境访问它
请关注CI Documentation获取更多信息
在你的 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
);
你可以做很多次 way.See documentation