You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 4数据库迁移失败:无法连接数据库求助

CodeIgniter 4 数据库迁移连接失败解决方案

问题现象

执行php spark migrate命令后出现数据库连接错误:

CodeIgniter v4.4.2 Command Line Tool - Server Time: 2023-10-24 07:34:54 UTC+00:00
Running all new migrations...
[CodeIgniter\Database\Exceptions\DatabaseException]
Unable to connect to the database.
Main connection [MySQLi]: Access denied for user ''@'localhost' (using password: NO)

错误栈信息:

at SYSTEMPATH\Database\BaseConnection.php:428
Backtrace:
1    SYSTEMPATH\Database\BaseConnection.php:575
CodeIgniter\Database\BaseConnection()->initialize()
2    SYSTEMPATH\Database\BaseConnection.php:1410
CodeIgniter\Database\BaseConnection()->query('SHOW TABLES FROM ')
3    SYSTEMPATH\Database\BaseConnection.php:1429
CodeIgniter\Database\BaseConnection()->listTables()
4    SYSTEMPATH\Database\MigrationRunner.php:764
CodeIgniter\Database\BaseConnection()->tableExists('migrations')
5    SYSTEMPATH\Database\MigrationRunner.php:168
CodeIgniter\Database\MigrationRunner()->ensureTable()
6    SYSTEMPATH\Commands\Database\Migrate.php:84
CodeIgniter\Database\MigrationRunner()->latest(null)
7    SYSTEMPATH\CLI\Commands.php:65
CodeIgniter\Commands\Database\Migrate()->run([])
8    SYSTEMPATH\CLI\Console.php:46
CodeIgniter\CLI\Commands()->run('migrate', [])
9    ROOTPATH\spark:102
CodeIgniter\CLI\Console()->run()

当前.env数据库配置:

#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------

database.tests.hostname = localhost
database.tests.database = portfolio_app.db
database.tests.username = root
database.tests.password =
database.tests.DBDriver = MySQLi
database.tests.DBPrefix =
database.tests.port = 3306

# database.tests.hostname = localhost
# database.tests.database = ci4_test
# database.tests.username = root
# database.tests.password = root
# database.tests.DBDriver = MySQLi
# database.tests.DBPrefix =
# database.tests.port = 3306

解决方案

1. 配置默认数据库连接

CodeIgniter 4 默认使用database.default连接组执行迁移,而你的.env仅配置了database.tests组,导致系统无法获取有效连接参数。

在.env中添加/修改database.default配置:

database.default.hostname = localhost
database.default.database = portfolio_app.db
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306

2. 指定测试环境执行迁移

如果需要使用已配置的database.tests连接组,执行迁移时加上环境参数:

php spark migrate --env tests

3. 额外检查项

  • 确认MySQL服务正在运行,端口3306正常监听。
  • 验证MySQL用户权限:登录MySQL执行SELECT user, host FROM mysql.user;,确保root@localhost用户存在且允许无密码登录(若你的密码为空)。
  • 检查数据库名称:MySQL数据库名通常不使用.db后缀,确认portfolio_app.db是你实际创建的数据库名称,若为笔误,改为正确名称如portfolio_app。

内容的提问来源于stack exchange,提问作者user12283728

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:50:17