升级PHP7至PHP8及Apache后ODBC Driver 18连接SQL Server报错求助
解决方案
1. 临时绕过证书验证(测试环境适用)
在PHP连接SQL Server的DSN或连接选项中添加TrustServerCertificate=Yes参数,强制客户端信任服务器证书:
- PDO连接示例:
$dsn = "sqlsrv:Server=your_server_name;Database=your_db_name;TrustServerCertificate=Yes"; $pdo = new PDO($dsn, $username, $password);
- sqlsrv扩展连接示例:
$connectionInfo = array( "Database" => "your_db_name", "UID" => $username, "PWD" => $password, "TrustServerCertificate" => "Yes" ); $conn = sqlsrv_connect("your_server_name", $connectionInfo);
2. 导入服务器CA证书到信任存储(生产环境推荐)
从SQL Server获取其SSL证书的CA根证书,将其导入到服务器的系统受信任根证书颁发机构存储中:
- Windows系统:通过
certmgr.msc打开证书管理器,找到「受信任的根证书颁发机构」,右键导入证书文件。 - Linux系统:将CA证书复制到
/etc/pki/ca-trust/source/anchors/目录,然后运行update-ca-trust命令更新信任存储。
3. 调整ODBC驱动加密配置
ODBC Driver 18默认启用Encrypt=Mandatory,若你的SQL Server未配置合法SSL证书,可修改连接字符串为Encrypt=Optional(不推荐生产环境):
$dsn = "sqlsrv:Server=your_server_name;Database=your_db_name;Encrypt=Optional";
内容的提问来源于stack exchange,提问作者IT Support BGEX
相关产品推荐
相关产品推荐

