ci3页面空白主因是数据库连接失败且错误被静默屏蔽,需先确认database.php是否加载(检查autoload、return $db)、开启db_debug并var_dump(conn_id)区分“连不上”或“连上写不进”,再排查hostname(改localhost为127.0.0.1)、mysqli扩展启用及mysql 8.0+认证协议兼容性。

页面空白不是代码没执行,而是数据库连接失败后 CI3 直接终止流程且未输出任何提示——关键在于让错误浮出水面,而不是猜配置哪错了。
确认 database.php 配置是否被真正加载
CI3 的数据库配置失效往往发生在框架加载前,所以改了 database.php 却没反应,大概率是配置根本没读进去。先验证这一点:
- 检查
application/config/autoload.php中是否启用了数据库自动加载:$autoload['libraries'] = array('database');;若没开,控制器里又没手动$this->load->database(),那整个 DB 类压根不会初始化 - 在控制器最开头加一行
var_dump($this->db);,如果报Fatal error: Call to a member function ... on null,说明$this->db是NULL,即数据库类根本没加载成功 - 确认
application/config/database.php文件末尾有return $db;,漏掉这句会导致配置数组不返回,CI3 会静默忽略
用 db_debug 和 conn_id 快速区分“连不上”和“连上了但写不进”
页面空白 + 无报错,是因为 CI3 默认把数据库错误吞掉了。必须主动打开调试开关并检查底层连接状态:
- 在
database.php中设$db['default']['db_debug'] = TRUE;,再刷新页面——如果出现完整 MySQL 错误(如Access denied、Unknown database或Connection refused),就定位到连接层问题 - 若开了
db_debug仍空白,说明连接建立了但后续操作崩了。此时在插入前加var_dump($this->db->conn_id);:返回bool(false)是连接失败;返回一个 resource(如resource #5)说明连上了,问题在 SQL、权限或字符集 - 注意:
db_debug = TRUE仅对数据库操作生效,若页面空白出现在数据库加载之前(比如 autoloader 报错),它也捕获不到
hostname 写成 'localhost' 在 Linux/Docker 下大概率失败
这是 CI3 最隐蔽的空白原因——localhost 在 Linux 下强制走 Unix socket,而 PHP 往往找不到 socket 文件路径,导致连接超时后静默失败。
- 把
$db['default']['hostname'] = 'localhost';改成'127.0.0.1',强制走 TCP/IP,绕过 socket 路径问题 - Docker 环境下尤其要改:容器内
localhost指向自己,不是宿主机 MySQL;用127.0.0.1同样无效,得填宿主机网关 IP 或 Docker network 别名(如mysql) - Windows 下也建议统一用
127.0.0.1,避免 DNS 解析延迟或 hosts 干扰
mysqli 扩展未启用时,错误表现就是完全空白
CI3 报 Unable to connect to your database server 却账号密码全对?八成是 PHP 根本没加载数据库驱动。
- 运行
php -m | grep -i mysqli(Linux/macOS)或php -m | findstr mysqli(Windows)确认扩展已启用 - 注意 CLI 和 Web Server(如 Apache/FPM)可能加载不同 php.ini:执行
php --ini和phpinfo()对比实际路径,别只改了一个 - Windows 下必须写
extension=php_mysqli.dll,写extension=mysqli不生效;PHP 7.0+ 已废弃mysql_*函数,确保extension=php_mysql.dll或extension=mysql被注释掉 - MySQL 8.0+ 默认用
caching_sha2_password认证插件,旧版 PHP mysqli 不支持——登录 MySQL 执行ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';临时解决
真正难排查的不是语法错误,而是那些“看起来配对了,其实环境没对齐”的点:hostname 解析路径、PHP 扩展加载上下文、MySQL 认证协议版本——这些地方一错,CI3 就只给你留个空白页面,连错误都懒得吐。











