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

PHP 8.1连接SQL Server遇SSL错误,求解决方案

解决PHP 8.1连接SQL Server时的SSL协议不兼容问题

你遇到的错误根源是ODBC Driver 18 for SQL Server默认强制启用SSL加密,但目标SQL Server要么未配置有效SSL证书,要么使用了驱动不支持的旧版TLS协议(如TLS 1.0/1.1)。结合你的代码,给出以下解决步骤:

1. 先修正代码语法错误

你的$connectionInfo数组最后一行多了个分号,会触发PHP语法错误,先修正:

<?php
    $serverName = "Server\MSSQLSERVER, 1433";
    $connectionInfo = array(
        "Database"=>"Name",
        "UID"=>"User",
        "PWD"=>"Password"
    );
    $conn = sqlsrv_connect($serverName, $connectionInfo);

    if($conn) {
         //echo "Conexión establecida.<br />";
    } else {
         echo "Conexión no se pudo establecer.<br />";
         die(print_r(sqlsrv_errors(), true));
    }
?>

2. 禁用加密(测试/内部环境适用)

在$connectionInfo中添加"Encrypt"=>"no",绕过SSL加密验证:

$connectionInfo = array(
    "Database"=>"Name",
    "UID"=>"User",
    "PWD"=>"Password",
    "Encrypt"=>"no"
);

3. 信任服务器证书(生产环境推荐,适用于自签名证书场景)

若不想完全禁用加密,可添加"TrustServerCertificate"=>"yes",让驱动信任服务器的自签名证书:

$connectionInfo = array(
    "Database"=>"Name",
    "UID"=>"User",
    "PWD"=>"Password",
    "Encrypt"=>"yes",
    "TrustServerCertificate"=>"yes"
);

4. 设置加密模式为可选

也可以配置"Encrypt"=>"optional",让驱动优先尝试加密连接,失败则降级为非加密:

$connectionInfo = array(
    "Database"=>"Name",
    "UID"=>"User",
    "PWD"=>"Password",
    "Encrypt"=>"optional"
);

5. 长期解决方案:升级SQL Server SSL配置

生产环境建议:

  • 确保SQL Server启用TLS 1.2或更高版本(ODBC Driver 18默认仅支持TLS 1.2+)
  • 配置有效的SSL证书(CA颁发证书或合规自签名证书)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:33:35