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

Laravel连接SQL Server出现连接字符串无效(证书相关)问题求助

解决Laravel连接SQL Server的"连接字符串无效[87]"错误

核心问题分析

你遇到的SQLSTATE[08001]错误,本质是Laravel的SQL Server连接配置未正确传递TrustServerCertificate参数,同时原有配置存在变量映射缺失、关键参数未定义的问题,导致驱动无法生成合法的连接字符串。

分步解决方案

1. 修正config/database.php的SQL Server连接配置

将原有的硬编码配置替换为读取.env变量,并添加options数组传递安全证书信任参数:

'sqlsrv_attendance' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_SQLSRV_HOST', '192.168.10.13'),
    'port' => env('DB_SQLSRV_PORT', 1433), // 显式指定端口,避免默认值异常
    'database' => env('DB_SQLSRV_DATABASE', 'dbname'),
    'username' => env('DB_SQLSRV_USERNAME', 'user'),
    'password' => env('DB_SQLSRV_PASSWORD', 'pass'),
    'charset' => 'utf8',
    'prefix' => '',
    'options' => [
        // 强制异常模式,便于调试
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        // 指定UTF-8编码
        PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8,
        // 信任SQL Server证书,解决SSL连接验证问题
        PDO::SQLSRV_ATTR_TRUST_SERVER_CERTIFICATE => env('DB_SQLSRV_TRUST_SERVER_CERT', true),
    ],
],

2. 优化.env文件的配置项

删除无用的DB_ODBC=0,将原DB_OPTIONS替换为更清晰的专用变量:

#####SQL Server Added
DB_SQLSRV_HOST=192.168.10.13
DB_SQLSRV_PORT=1433
DB_SQLSRV_DATABASE=dbname
DB_SQLSRV_USERNAME=user
DB_SQLSRV_PASSWORD=pass
DB_SQLSRV_TRUST_SERVER_CERT=true
#####################

3. 清除Laravel配置缓存

修改配置后,必须清除缓存让新配置生效:

php artisan config:cache

4. 验证PHP扩展状态

确保sqlsrv和pdo_sqlsrv扩展已正确启用:

  • 在XAMPP的PHP目录中打开php.ini,确认以下两行无注释:
    extension=sqlsrv
    extension=pdo_sqlsrv
    
  • 重启Apache服务后,访问phpinfo()页面,搜索sqlsrv和pdo_sqlsrv,确认扩展已加载。

5. 检查SQL Server的TCP/IP协议

在目标SQL Server服务器上:

  1. 打开SQL Server配置管理器
  2. 展开SQL Server网络配置 → 对应实例的协议
  3. 确保TCP/IP已启用
  4. 双击TCP/IP,在IP地址选项卡中确认IPAll的TCP端口为1433

额外说明

  • 不需要配置ODBC DSN:Laravel的sqlsrv驱动支持直接通过参数建立连接,无需预定义DSN。
  • 测试路由无需修改,配置生效后重新访问即可读取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:25:11