本地能连、上线后连不上,核心问题是生产环境数据库配置、php环境或服务器权限与本地不一致;需重点检查数据库凭据主机前缀适配(如cpanel账户名前缀)、localhost改为127.0.0.1以规避unix socket路径问题、mysql 8.0认证插件兼容性(改用mysql_native_password)、php扩展是否启用及版本匹配、项目目录结构与入口路径是否正确。

本地能连、上线后连不上,核心问题不是代码写错了,而是生产环境的数据库配置、PHP环境或服务器权限和本地不一致。重点查三块:数据库凭据是否适配主机规则、PHP扩展和认证协议是否支持、项目结构和路径是否正确。
检查数据库名和用户名有没有加主机前缀
Namecheap、GoDaddy等共享主机强制要求数据库名和用户名必须带cPanel账户名前缀。比如你在本地用的是myapp_db和myapp_user,上传后得改成yourcpanel_myapp_db和yourcpanel_myapp_user。直接复制本地配置过去,90%会失败。
- 登录cPanel → MySQL Databases,确认你创建的数据库和用户全名
- 在.env或database.php里,把database.default.database和database.default.username改成带前缀的完整名称
- 别漏掉授权步骤:在cPanel里手动把该用户添加到目标数据库,并勾选ALL PRIVILEGES
换掉localhost,改用127.0.0.1
Linux服务器上,localhost默认走Unix socket,但PHP可能找不到mysql.sock路径,报错“HY000/2002: No such file or directory”。换成127.0.0.1就强制走TCP/IP,绕过这个坑。
- 在.env中改为:database.default.hostname = "127.0.0.1"
- 如果用的是MySQL 8.0+,还要注意认证插件兼容性:旧版PHP不支持caching_sha2_password,需登录MySQL执行:
ALTER USER 'youruser'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpass';
确认PHP扩展已启用且版本匹配
CI报“Unable to connect to your database server”,但账号密码都对?大概率是mysqli或pdo_mysql根本没加载。
- 新建一个phpinfo.php,内容为,访问它,搜索“mysqli”确认是否启用
- 运行php --ini看实际加载的php.ini路径,别只改Apache下的那份
- CI4要求PHP 7.3+,CI3最低要PHP 5.6+;若主机提供多个PHP版本,在cPanel里手动切换并保存
验证项目结构和入口文件路径
很多上线失败,其实是public目录没放对位置,导致.env读不到或Config文件加载异常。
- 子域名根目录(如/home/user/example.tgsoftware.services)应只放public里的内容(index.php、.htaccess等)
- app、system、.env等核心文件夹放在上一级目录(/home/user/)
- 修改根目录下的index.php,确保$pathsPath指向正确的/home/user/app/Config/Paths.php
- 最后写个独立测试文件test_db.php,用原生mysqli_connect直连,快速判断是CI配置问题还是数据库本身不通











