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

升级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/1
  • trustServerCertificate参数名需为小驼峰格式,值用布尔值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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:44:56