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
相关产品推荐
相关产品推荐

