我正在尝试连接到MSSQL服务器。服务器MSSQL服务器没有SSL选项活动,所以我试图连接到它没有SSL。
编辑->操作系统是Centos9
我使用PHP8.0.20作为驱动程序连接到MSSQL服务器,我使用ODBC驱动程序18用于Server
我试图使用的代码是:
<?php
$serverName = "xxx.xxx.xxx.xxx";
$connectionInfo = array("Database"=>"mydatabse","UID"=>"myuser","PWD"=>"mypassword","Encrypt"=>false,"TrustServerCertificate"=>false);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
$sql = "select * from table";
$params = array(1, "some data");
$stmt = sqlsrv_query( $conn, $sql, $params);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
?>
我得到的输出是:
Array
(
[0] => Array
(
[0] => 08001
[SQLSTATE] => 08001
[1] => -1
[code] => -1
[2] => [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol]
[message] => [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol]
)
[1] => Array
(
[0] => 08001
[SQLSTATE] => 08001
[1] => -1
[code] => -1
[2] => [Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish connection
[message] => [Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish connection
)
)
如何使用PHP8.0.20和ODBC驱动程序18连接到MSSQL,因为SQL服务没有SSL。
谢谢大家!
发布于 2022-10-09 22:49:52
我怀疑这个错误是由数据库服务器的v18不再支持的较旧版本的SSL造成的。我认为没有完全禁用SSL的方法,建议的方法是连接SSL,但使用自签名证书(并启用TrustServerCertificate
连接)。
不管怎么说,就我个人而言,我一直对微软在PHP中的官方实现有异议。我使用了优秀的FreeTDS/Sybase DB-lib驱动程序。
下面是一个使用PDO的例子,我推荐这两种方法,因为它允许您使用相同的代码来使用不同的驱动程序连接到不同的服务器。我还包括了用于使用官方驱动程序的连接字符串示例,但是注释掉了。
$host = 'x.x.x.x';
$user = 'xxx';
$pass = 'xxx';
$db = 'xxx';
//$dsn = "sqlsrv:Server={$host};Database={$db};Encrypt=no;TrustServerCertificate=yes";
//$dsn = "odbc:Driver={ODBC Driver 18 for SQL Server};Server={$host};Database={$db};Encrypt=no;TrustServerCertificate=yes";
$dsn = "dblib:host={$host};dbname={$db}";
try {
$dbh = new PDO($dsn, $user, $pass);
$query = "select @@version";
foreach($dbh->query($query) as $row)
{
print_r($row);
}
}
catch (PDOException $e)
{
print "PDO ERROR: {$e->getMessage()}\n";
}
更多信息:
https://www.php.net/manual/en/book.pdo.php
您应该能够在CentOS上安装它
sudo dnf install php-pdo-dblib.x86_64
https://stackoverflow.com/questions/73863642
复制相似问题