首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试用没有SSL的PHP8 / ODBC驱动程序18连接到MSSQL服务器

尝试用没有SSL的PHP8 / ODBC驱动程序18连接到MSSQL服务器
EN

Stack Overflow用户
提问于 2022-09-27 07:09:37
回答 1查看 262关注 0票数 1

我正在尝试连接到MSSQL服务器。服务器MSSQL服务器没有SSL选项活动,所以我试图连接到它没有SSL。

编辑->操作系统是Centos9

我使用PHP8.0.20作为驱动程序连接到MSSQL服务器,我使用ODBC驱动程序18用于Server

我试图使用的代码是:

代码语言:javascript
运行
复制
<?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));
 }
?>

我得到的输出是:

代码语言:javascript
运行
复制
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。

谢谢大家!

EN

回答 1

Stack Overflow用户

发布于 2022-10-09 22:49:52

我怀疑这个错误是由数据库服务器的v18不再支持的较旧版本的SSL造成的。我认为没有完全禁用SSL的方法,建议的方法是连接SSL,但使用自签名证书(并启用TrustServerCertificate连接)。

不管怎么说,就我个人而言,我一直对微软在PHP中的官方实现有异议。我使用了优秀的FreeTDS/Sybase DB-lib驱动程序。

下面是一个使用PDO的例子,我推荐这两种方法,因为它允许您使用相同的代码来使用不同的驱动程序连接到不同的服务器。我还包括了用于使用官方驱动程序的连接字符串示例,但是注释掉了。

代码语言:javascript
运行
复制
$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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73863642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档