application/config/database.php是ci框架唯一需填写数据库连接信息的位置,定义default等数据库组,必须正确配置hostname、username、password、database、dbdriver等大小写敏感键,且$active_group须指向已定义组名。

application/config/database.php 是唯一需要填写数据库连接信息的位置。
这个文件定义了所有数据库组的配置,包括 default 组(CI 启动时默认加载的连接),也支持添加多个自定义组(比如 slave、log_db)。填错位置或漏配关键项,会导致 Unable to connect to your database server using the provided settings 这类错误。
database.php 里必须填对的几个键
这些不是可选字段,缺一不可,且大小写敏感:
-
'hostname':数据库服务器地址,本地用'localhost'或'127.0.0.1';Docker 环境常见为'db'(服务名) -
'username'和'password':数据库用户凭据,注意不要留空(除非 MySQL 允许空密码且你明确接受风险) -
'database':目标数据库名,必须已存在;CI 不会自动创建库 -
'dbdriver':驱动类型,常见值是'mysqli'(MySQL)、'postgre'(PostgreSQL)、'sqlsrv'(SQL Server);填错会直接报Driver not found -
'char_set'和'dbcollat':建议设为'utf8mb4'和'utf8mb4_unicode_ci',避免中文乱码或 emoji 存储失败
为什么不能在 autoload.php 或控制器里硬编码连接参数
硬编码破坏配置分离原则,导致:
- 环境切换困难(开发/测试/生产共用同一份代码,但数据库不同)
-
$autoload['libraries'] = array('database')只控制是否自动加载 DB 类,不提供连接参数 - 控制器中调用
$this->load->database()时,仍会回退到database.php中的default组;传参覆盖(如$this->load->database('other_group', TRUE))只是临时切换,底层仍依赖该文件定义的组
多环境数据库配置怎么生效
CodeIgniter 支持按环境加载不同 database.php,前提是:
- 确保
ENVIRONMENT常量已在index.php中正确定义(如define('ENVIRONMENT', 'production');) - 对应环境目录存在且结构正确:
application/config/{environment}/database.php(例如application/config/production/database.php) - 主配置文件
application/config/database.php里的$active_group仍需保留,它决定当前激活哪个组名,而不是路径
注意:环境子目录下的 database.php 文件内容格式与根目录完全一致,只是参数值不同。
容易被忽略的两个坑
一是 $active_group = 'default'; 这行必须存在且指向一个已定义的组名,否则 CI 会静默使用空配置;二是 'port' 字段——MySQL 默认 3306、PostgreSQL 默认 5432,如果改过端口却没填,连接会超时无提示。CI3 不会主动读取 my.cnf,一切以 database.php 为准。











