求助:ODBC Driver 18 for SQL Server无法与PHP PDO建立连接
解决PHP PDO连接MSSQL自签名证书验证失败问题
针对你遇到的SQLSTATE[08001]证书验证错误,以下是几种可行的解决方法:
方法1:在DSN字符串中直接指定参数
PDO连接MSSQL时,部分驱动版本优先读取DSN中的配置,而非options数组。直接在DSN里添加TrustServerCertificate=Yes和Encrypt参数:
$server = "your_server_address"; $dbname = "your_database"; $dsn = "sqlsrv:Server=$server,1433;Database=$dbname;TrustServerCertificate=Yes;Encrypt=Yes"; $pdo = new PDO($dsn, $username, $password);
- 如果你的环境允许不加密连接,也可以将
Encrypt=No,但部分新版驱动可能强制加密,优先推荐Encrypt=Yes配合TrustServerCertificate=Yes。
方法2:使用PDO SQLSRV扩展的常量配置选项
如果要通过options数组传递参数,需使用扩展提供的预定义常量,而非字符串键名:
$options = [ PDO::SQLSRV_ATTR_ENCRYPT => PDO::SQLSRV_ENCRYPT_YES, PDO::SQLSRV_ATTR_TRUST_SERVER_CERTIFICATE => true ]; $pdo = new PDO($dsn, $username, $password, $options);
之前你用字符串键(如'trust_server_certificate')无效,是因为该扩展不识别这种格式的键名,必须使用官方定义的常量。
方法3:全局配置php.ini(不推荐用于多连接场景)
如果需要全局生效,可修改php.ini文件添加以下配置:
sqlsrv.TrustServerCertificate = On sqlsrv.Encrypt = On
修改后重启PHP服务即可,但此设置会影响所有MSSQL连接,适合单一数据库环境。
内容的提问来源于stack exchange,提问作者Randommm
相关产品推荐
相关产品推荐

