ci3新增数据连接异常需分步排查:先确认database.php配置(地址、账号、库名、权限、mysqli扩展),再开启db_debug和var_dump(conn_id)定位“连不上”或“连上写不进”,接着检查字符集、sql模式、表结构及ci3语法规范。

CI3(CodeIgniter 3)中数据库配置完成后新增数据时连接异常,通常不是单一原因导致,而是配置、驱动、环境或权限多个环节协同出问题。关键在于快速定位是“连不上”还是“连上了但写不进”,再针对性修复。
检查数据库配置是否生效
CI3 的数据库配置位于 application/config/database.php,常见疏漏包括:
- 未确认
$db['default']['hostname']是否指向真实数据库地址(如本地用127.0.0.1而非localhost,尤其在 Docker 或 MySQL 8+ 环境下行为不同); -
$db['default']['username']和$db['default']['password']是否与 MySQL 实际账号一致,注意空密码需显式写成'',不能留空或注释掉; -
$db['default']['database']指定的库名是否存在,且该用户对该库有INSERT权限(仅SELECT权限会导致新增失败但无明确报错); - 若使用 MySQLi 驱动(CI3 默认),确保 PHP 已启用
mysqli扩展(Linux 下执行php -m | grep mysqli,Windows 检查php.ini中extension=mysqli未被注释)。
验证连接状态与错误提示
不要依赖页面白屏或空白响应——开启 CI3 的数据库调试功能:
- 在
database.php中设置$db['default']['db_debug'] = TRUE;; - 在控制器中执行插入前,加一句
var_dump($this->db->conn_id);,若返回bool(false),说明连接根本未建立; - 若插入失败,查看完整错误信息(如
Access denied for user...、Connection refused或Unknown database),比“新增失败”更有诊断价值。
排查字符集与 SQL 模式兼容性
CI3 默认使用 utf8 字符集,但 MySQL 5.7+ 默认启用严格模式(STRICT_TRANS_TABLES),易引发隐式转换失败:
- 确认
$db['default']['char_set'] = 'utf8mb4';且$db['default']['dbcollat'] = 'utf8mb4_unicode_ci';(尤其涉及 emoji 或中文长文本); - 在 MySQL 中执行
SELECT @@sql_mode;,若含STRICT_TRANS_TABLES,可在配置中追加'stricton' => FALSE(不推荐长期关闭,仅用于快速验证); - 检查表结构:字段是否设为
NOT NULL却未传值?时间类型字段是否传了非法格式(如NULL传给datetime NOT NULL)?
确认模型/查询语法是否符合 CI3 规范
CI3 对 Active Record 的链式调用较敏感,常见写法陷阱:
- 新增操作必须使用
$this->db->insert()或$this->db->set()->insert(),不能混用原生query()后忘记escape(); - 若用数组插入,键名必须与数据库字段名完全一致(区分大小写,尤其在 Linux 环境);
- 使用事务时,务必配对
$this->db->trans_start()和$this->db->trans_complete(),否则可能静默失败; - 避免在循环中反复调用
$this->load->database(),应复用已有连接实例。











