首先,我真的很菜鸟。(抱歉)
其次,我尝试将 php 连接到 mssql 服务器。
第三,我已经安装了 sqlsrv、pdo_sqlsrv 和 msodbcsql.msi
但尝试连接时仍然收到错误消息
我的php版本是8.0.10,x64; mssql 服务器 2012。
我的 php 代码用于测试连接:
<?php
$serverName = "10.xxx.xx.148";
$connectionInfo = array( "Database"=>"zzzz", "UID"=>"ww","PWD"=>"123cccc");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));}
?>
然后我收到错误,并指示安装 msodbcsql.msi,我按照指示安装它。但随后显示我无法解决的新错误。
Array ( [0] => Array ( [0] => 08001 [SQLSTATE] => 08001
=> -2146893019 [code] => -2146893019
=> [Microsoft][适用于 SQL 的 ODBC 驱动程序 18服务器]SSL 提供程序:证书链由不受信任的颁发机构颁发。[消息] => [Microsoft][SQL Server 的 ODBC 驱动程序 18]SSL 提供程序:证书链由不受信任的颁发机构颁发。 )
=> 数组 ( [0] => 08001 [SQLSTATE] => 08001
=> -2146893019 [代码] => -2146893019
=> [Microsoft][适用于 SQL Server 的 ODBC 驱动程序 18]客户端无法建立连接 [消息] => [Microsoft][ODBC Driver 18 for SQL Server]客户端无法建立连接 ) )
附加信息:当我将 dbeaver(不同的电脑)连接到 mssql 服务器(同一服务器)时没有问题。
提前谢谢你
以防万一有人想知道如何将 TrustServerCertificate 定义为 1,我就是这样做的,我将参数添加为新的数组元素,如下所示
<?php
$serverName = "10.xxx.xx.148";
$connectionInfo = array(
"Database"=>"zzzz",
"UID"=>"ww",
"PWD"=>"123cccc",
"TrustServerCertificate"=>true
);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
?>
我使用 ODBC 驱动程序 17 而不是 ODBC 驱动程序 18,问题得到解决。就我而言,我不需要加密,因此驱动程序 17 对我来说没问题。
我从 ODBC 驱动程序 18 降级到 ODBC 驱动程序 17。 它可以在 Laravel 9 和 PHP 8.2 中工作