升级PHP至8.2.9后,Doctrine连接SQL Server遇SSL证书信任错误
PHP 8.2.9 + Doctrine 连接SQL Server 证书信任问题
使用Wampserver 3.3.1作为Web服务器,将PHP版本从8.2.0升级到8.2.9后,使用最新版Doctrine连接SQL Server时出现如下错误:
[Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: The certificate chain was issued by an authority that is not trusted.
此前通过设置TrustServerCertificate和Encrypt参数可正常连接,但升级PHP后该配置失效。
数据库连接代码
$Params = [ 'dbname' => 'XXX', 'user' => 'XXX', 'password' => 'XXX', 'host' => 'XXXX', 'driver' => 'sqlsrv', 'Encrypt' => 0, 'TrustServerCertificate' => 1, ]; $conn = DriverManager::getConnection($Params);
查询代码
$queryBuilder = $conn->createQueryBuilder(); $queryBuilder ->select('*') ->from('Job, JobDetail, JobStateChronic') ->where('Job.JobDetailID = JobDetail.JobDetailID AND Job.JobDetailID = JobStateChronic.JobDetailID') ->andWhere('YEAR(Job.StartDate) = ? AND MONTH(Job.StartDate) = ? AND DAY(Job.StartDate) = ?') ->setParameter(0, '2023') ->setParameter(1, '04') ->setParameter(3, '24') ; $stm = $queryBuilder->executeQuery(); $data = $stm->fetchAllAssociative(); echo "<pre>"; print_r($data); echo "</pre>";
完整错误日志
[05.08.2023 - 12:10:49] [ERROR] [Uncaught Exception Doctrine\DBAL\Exception\DriverException: "An exception occurred in the driver: SQLSTATE [08001, -2146893019]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: The certificate chain was issued by an authority that is not trusted. SQLSTATE [08001, -2146893019]: [Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722" at C:\wamp64\www\taxihof-manager\vendor\doctrine\dbal\src\Driver\API\SQLSrv\ExceptionConverter.php line 67] {"exception":"[object] (Doctrine\\DBAL\\Exception\\DriverException(code: -2146893019): An exception occurred in the driver: SQLSTATE [08001, -2146893019]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: The certificate chain was issued by an authority that is not trusted.\r\n\nSQLSTATE [08001, -2146893019]: [Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722 at C:\\wamp64\\www\\taxihof-manager\\vendor\\doctrine\\dbal\\src\\Driver\\API\\SQLSrv\\ExceptionConverter.php:67)\n[previous exception] [object] (Doctrine\\DBAL\\Driver\\SQLSrv\\Exception\\Error(code: -2146893019): SQLSTATE [08001, -2146893019]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: The certificate chain was issued by an authority that is not trusted.\r\n\nSQLSTATE [08001, -2146893019]: [Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722 at C:\\wamp64\\www\\taxihof-manager\\vendor\\doctrine\\dbal\\src\\Driver\\SQLSrv\\Exception\\Error.php:42)"} []
解决方案
1. 修正连接参数的格式与大小写
ODBC Driver 18对参数的格式和大小写要求更严格,将连接参数调整为符合驱动要求的格式:
$Params = [ 'dbname' => 'XXX', 'user' => 'XXX', 'password' => 'XXX', 'host' => 'XXXX', 'driver' => 'sqlsrv', 'encrypt' => false, // 改用布尔值,参数名小写 'trustServerCertificate' => true, // 参数名改为小驼峰格式,值用布尔值 ];
encrypt参数有效值为true/false或yes/no,不再支持数字0/1trustServerCertificate参数名需为小驼峰格式,值用布尔值true/false
2. 同步更新PHP sqlsrv扩展
升级PHP后,需确保安装了与PHP 8.2兼容的最新版sqlsrv和pdo_sqlsrv扩展:
- 替换Wampserver对应PHP版本目录下的扩展文件
- 在
php.ini中确认extension=sqlsrv和extension=pdo_sqlsrv未被注释
3. 检查ODBC Driver 18全局配置
确认ODBC Driver 18的系统配置中没有强制加密的全局设置,避免覆盖代码中的参数。
4. 验证参数传递有效性
通过打印Doctrine实际传递给驱动的参数,确认配置是否正确生效:
var_dump($conn->getParams());
内容的提问来源于stack exchange,提问作者TeemoCell
相关产品推荐
相关产品推荐

