<p>CodeIgniter 3 在 PHP 8.0 下报 mysqlconnect() 未定义,因其早在 PHP 7.0 已被彻底移除;需全项目搜索并替换所有 mysql* 函数调用,确保 database 配置 dbdriver 设为 'mysqli',并建议回退至 PHP 7.4 或升级至 CI4。</p>

CodeIgniter 3 在 PHP 8.0 下报 mysql_connect() 未定义,是因为该函数早在 PHP 7.0 就被彻底移除,PHP 8.0 中已完全不存在。这不是配置或路径问题,而是版本不兼容的硬性限制——CI3 默认仍可能在极旧分支或自定义代码中残留对废弃 MySQL 扩展的引用。
确认你用的是原生 CI3,不是手动混入了旧代码
标准 CodeIgniter 3.1.13(最新稳定版)早已弃用 mysql_* 系列函数,底层只走 mysqli 或 PDO。如果你看到报错明确指向 mysql_connect(),大概率是以下情况之一:
- 项目里存在自定义的旧辅助函数、封装类或第三方插件,直接调用了
mysql_connect() - 某个模型、库文件或钩子(hook)里手写了该函数调用(比如为了快速测试临时加的)
- 你修改过
system/database/drivers/mysql/目录下的文件(CI3 本就不含这个目录,若有说明被篡改过)
检查并清理所有残留的 mysql_* 调用
全项目搜索关键词:mysql_connect、mysql_query、mysql_fetch、mysql_error 等。重点关注:
-
application/下所有.php文件(尤其是 models、libraries、helpers) -
application/config/里的自定义配置文件(如误把连接逻辑写进 config) - 是否引入了非 CI 官方的数据库封装类(比如某些老教程写的“DbHelper.php”)
一旦找到,全部替换为 mysqli 原生写法,或更推荐:统一交给 CI 的 Query Builder 处理(如 $this->db->insert()),避免直连。
立即学习“PHP免费学习笔记(深入)”;
确保 database 配置驱动设为 mysqli
打开 application/config/database.php,确认默认组的 dbdriver 是:
'dbdriver' => 'mysqli',
而不是 'mysql'(这是已废弃驱动名)、'pdo'(没配好 PDO DSN 也会出问题)或留空。同时检查:
-
'hostname'建议用'127.0.0.1',避免'localhost'触发 Unix socket 导致连接失败 -
'username'、'password'、'database'均需真实有效 - PHP 确实启用了
mysqli扩展:php -m | grep mysqli(CLI)和phpinfo()(Web)都要验证
升级或降级不是首选,但要有备选方案
CI3 官方支持 PHP 5.6–7.4,PHP 8.0 不在兼容范围内。强行运行虽可能“凑合”,但隐患多(如类型声明冲突、create_function() 报错等)。务实建议:
- 短期救急:回退到 PHP 7.4(最稳妥,CI3 完美支持)
- 中期过渡:将关键业务逻辑逐步迁移到 CI4(原生支持 PHP 8.0+,且 mysqli 是默认驱动)
- 不建议打补丁硬扛 PHP 8.0——CI3 架构老旧,后续会陆续暴露更多兼容性问题



















