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

