Laravel 8.0连接PlanetScale可迁移但查询报错SQLSTATE[HY000][2002]
Laravel 8 连接 PlanetScale 可迁移但查询报错 SQLSTATE[HY000] [2002] 的解决建议
问题说明
使用 Laravel 8.0 连接 PlanetScale 时,已完成 .env 配置(包含 SSL 证书),能正常执行数据表迁移,但执行查询操作时持续抛出错误:
Illuminate\Database\QueryException.SQLSTATE[HY000] [2002] (SQL: select * from company_user)
本地非 PlanetScale 环境可正常完成迁移、插入及查询操作,当前使用的 .env 配置如下:
DB_CONNECTION=mysql DB_HOST=aws.connect.psdb.cloud DB_PORT=3306 DB_DATABASE=business_directory DB_USERNAME=<username> DB_PASSWORD=<password> //cacert.pem is inside the root directory MYSQL_ATTR_SSL_CA=cacert.pem
解决建议
确认 SSL 证书路径有效性
虽然注释标注证书在根目录,但 Laravel 可能存在路径解析问题。可尝试两种方式修正:- 使用绝对路径配置:
MYSQL_ATTR_SSL_CA=/绝对路径/到项目根目录/cacert.pem - 在
config/database.php的 mysql 连接配置中,用 Laravel 辅助函数生成路径:'mysql' => [ // 其他原有配置 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => base_path('cacert.pem'), ]) : [], ],
修改后执行
php artisan config:clear清除配置缓存。- 使用绝对路径配置:
检查 PlanetScale 连接限制与分支状态
PlanetScale 有连接数上限,可能迁移后未释放连接导致新查询无法建立。可重启 Laravel 服务,同时确认目标分支是否处于活跃状态(未被暂停)。调整 SSL 相关配置项
若证书验证存在问题,可临时在config/database.php中补充 SSL 选项(生产环境不建议关闭证书验证):'mysql' => [ // 其他原有配置 'options' => [ PDO::MYSQL_ATTR_SSL_CA => base_path('cacert.pem'), PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, ], ],验证 PHP 扩展的 SSL 支持
执行命令php -i | grep pdo_mysql,查看输出中是否包含 SSL 相关配置,确保pdo_mysql扩展已编译 SSL 支持。匹配 PlanetScale 推荐的 Laravel 配置
在config/database.php的 mysql 连接中补充字符集与排序规则,同时清空 Unix Socket 配置:'mysql' => [ // 其他原有配置 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'unix_socket' => '', ],
内容的提问来源于stack exchange,提问作者Yato
相关产品推荐
相关产品推荐

