ci3中$active_group失效主因是配置未被正确加载:路径/文件名错误、键名不匹配、autoload未配置、缓存未清除或被覆盖。需严格检查database.php位置、$db键名一致性、autoload设置及缓存清理。

CI3 中 $active_group 设置无效,通常不是配置写错了这么简单,而是框架根本没读到你改的那组配置——多数情况是加载逻辑或命名规则出了偏差。
配置文件路径或文件名不对
CI3 只认 application/config/database.php 这个固定路径和文件名。如果误放在子目录、改名成 database_config.php,或者用了软链接但权限受限,框架会静默加载默认空配置,$active_group 自然失效。
- 确认文件真实存在且可被 Web 用户(如 www-data)读取
- 检查是否在多环境配置中(如
development/database.php)覆盖了主配置 - 避免使用 IDE 自动生成的隐藏备份文件(如
database.php~),CI 不会识别
active_group 值与实际定义的键名不一致
$active_group 必须严格匹配 $db 数组中某个键名,区分大小写、不能有空格或不可见字符。
- 比如定义的是
$db['master'] = [...],但写了$active_group = 'Master';或'master '(尾部空格),都会失败 - 常见拼写错误:
'defalut'、'default '、'DEFAULT' - 用
var_dump(array_keys($db));在配置文件末尾临时加一行,确认键名到底是什么
autoload.php 中自动加载了数据库,但未指定 group
如果在 application/config/autoload.php 里写了 $autoload['libraries'] = array('database');,CI3 默认会加载 $active_group 指向的组;但如果这里漏配,或后续代码中又调用 $this->load->database() 却没传参数,就会回退到 'default' 组,绕过你的 $active_group。
- 要么确保 autoload 明确生效,要么统一在控制器里显式加载:
$this->load->database('master'); - 检查是否有其他地方(如 MY_Controller 基类)提前调用了
$this->load->database()且未指定 group
缓存未清除或配置被覆盖
CI3 会把配置缓存到 application/cache/ 下(尤其开启 $config['cache_path'] 时)。若之前运行过,旧缓存可能还在,导致新改的 $active_group 不生效。
- 手动清空
application/cache/目录下所有文件 - 检查是否有第三方插件或自定义核心类(如
MY_Config)重写了load方法,偷偷覆盖了$active_group - 搜索整个项目,看是否有多处
$active_group =赋值,后写的会覆盖前写的











