CodeIgniter 4 数据库配置位于 app/Config/Database.php,采用面向对象形式,驱动名必须首字母大写(如 'MySQLi'),且需启用 intl 扩展;CI3 则使用 application/config/database.php 的数组格式,驱动名为小写 'mysqli',并依赖 $active_group 指定默认组。

CodeIgniter 3 和 4 的数据库配置方式不同,报错往往源于路径错误、语法差异、环境未适配或扩展缺失。改对不报错,关键不是“随便填”,而是按版本规范做对三件事:位置对、格式对、依赖对。
✅ CodeIgniter 3 数据库配置(application/config/database.php)
这是最常见出错的地方——改了文件却没生效,或参数写错导致连接失败。
确认文件路径正确
必须是application/config/database.php,不能放在其他目录,也不能重命名(除非你手动加载)。核心配置项必须齐全且类型正确
使用标准数组格式,注意'pconnect'、'db_debug'等布尔值用TRUE/FALSE(不是字符串"true"):
$db['default'] = array(
'hostname' => 'localhost',
'username' => 'your_db_user',
'password' => 'your_db_pass',
'database' => 'your_db_name',
'dbdriver' => 'mysqli', // 推荐用 mysqli,不是 mysql(已废弃)
'dbprefix' => '',
'pconnect' => FALSE, // 生产环境建议 FALSE
'db_debug' => (ENVIRONMENT !== 'production'), // 开发时开,上线关
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8mb4', // 比 utf8 更安全,支持 emoji
'dbcollat' => 'utf8mb4_unicode_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);-
别漏掉
$active_group
这行必须存在,且值要和上面数组的键一致(默认是'default'):$active_group = 'default';
-
自动加载数据库类(避免手动 load)
编辑application/config/autoload.php:$autoload['libraries'] = array('database');
✅ CodeIgniter 4 数据库配置(app/Config/Database.php)
CI4 用的是面向对象配置,不是数组,结构更严格,改错一行就报 Class 'CodeIgniter\Database\MySQLi\Connection' not found 或连接失败。
-
不要直接改数组,要改类属性
打开app/Config/Database.php,找到public $default属性(它是一个DatabaseGroup实例):
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'your_db_user',
'password' => 'your_db_pass',
'database' => 'your_db_name',
'DBDriver' => 'MySQLi', // 注意首字母大写,且是字符串不是小写 mysqli
'DBPrefix' => '',
'pConnect' => false, // 小写 false,不是 FALSE
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_unicode_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];驱动名必须首字母大写
❌'mysqli'→ 报错
✅'MySQLi'或'SQLite3'或'Postgre'—— CI4 对大小写敏感。-
确保
.env文件没冲突(推荐方式)
CI4 支持环境变量优先。在项目根目录.env中写:database.default.hostname = localhost database.default.username = your_db_user database.default.password = your_db_pass database.default.database = your_db_name database.default.DBDriver = MySQLi
这样
Database.php里的配置会自动被覆盖,更安全也更易切换环境。
⚠️ 共同易错点(3 和 4 都要检查)
-
PHP 扩展未启用
- CI3:需要
mysqli或pdo_mysql - CI4:除
mysqli外,必须启用intl扩展(否则启动直接报错:The framework needs the following extension(s) installed and loaded: intl.)
✅ 检查方式:创建info.php输出phpinfo(),搜索intl;或终端运行php -m | grep intl
- CI3:需要
数据库服务根本没起来
连不上localhost?试试127.0.0.1,或确认 MySQL 是否在运行(sudo service mysql status)。权限或防火墙问题
特别是远程数据库:检查用户是否允许从%登录,以及服务器 3306 端口是否开放。字符集不匹配导致插入乱码或失败
建议数据库、表、连接层全部统一为utf8mb4+utf8mb4_unicode_ci,CI 配置里也要对应。
不复杂但容易忽略。


















