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

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 可能存在路径解析问题。可尝试两种方式修正:

    1. 使用绝对路径配置:
      MYSQL_ATTR_SSL_CA=/绝对路径/到项目根目录/cacert.pem
      
    2. 在 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:17