无法通过 XAMPP 连接到 SQL 数据库 - 驱动程序的 SQLSetConnectAttr 失败

Posted

技术标签:

【中文标题】无法通过 XAMPP 连接到 SQL 数据库 - 驱动程序的 SQLSetConnectAttr 失败【英文标题】:Cannot connect to a SQL database via XAMPP - Driver's SQLSetConnectAttr failed 【发布时间】:2021-08-28 14:57:00 【问题描述】:

我正在尝试从我的 php 代码访问 SQL 数据库。我目前正在使用 XAMPP 8.0.6 和 PHP 8.0.6。这也不适用于安装了 PHP 7.4.19 和相关扩展的机器。

已安装的驱动程序/扩展:

sql-srv: php_sqlsrv_80_ts_x64.dll sql-pdo: php_pdo_sqlsrv_80_ts_x64.dll OBDC 驱动程序:10.0.19041.1

sqlsrv 和 sql-pdo 正确放置在 php.ini 中。使用 OBDC gui 连接到数据库,我获得了成功的连接。

我试图从数据库中获取数据的代码是:

      function mssqlConnect()
        $ServerName = "xxx";
        $ConnectionTimeout = 30;
        $connectionOptions = ["Database"=>"database","UID"=>"user","PWD"=>"password", "LoginTimeout" => $ConnectionTimeout];
        
        $sqlconn = sqlsrv_connect($ServerName,$connectionOptions);
        if( $sqlconn ) 
          echo "Connection established";
         else 
          echo "Connection could not be established";
          die( print_r( sqlsrv_errors(), true));
        
      

尝试运行时,我收到以下消息:

Connection could not be established. 
Array (
[0] => Array (
[0] => IM006
[SQLSTATE] => IM006
[1] => 0
[code] => 0
[2] =>
[Microsoft]
[ODBC Driver Manager] Driver\'s SQLSetConnectAttr failed
)
[1] => Array (
[0] => 01000
[SQLSTATE] => 01000
[1] => 5701
[code] => 5701
[2] =>
[Microsoft]
[ODBC Driver 11 for SQL Server]
[SQL Server]Changed database context to \'database\'.
)
[2] => Array (
[0] => 01000
[SQLSTATE] => 01000
[1] => 5703
[code] => 5703
[2] =>
[Microsoft]
[ODBC Driver 11 for SQL Server]
[SQL Server]Changed language setting to us_english.
)

它能够很好地访问数据库。当我尝试使用虚假用户/密码时,我收到 401 错误 [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'other user'

我发现一个页面说禁用池,我在 $conectionOptions 数组中设置了一个 ConnectionPooling 选项,其中包含 0 和 1,并且得到了相同的结果。我还尝试通过 OBDC GUI 将其更改为相同的结果。

我无法成功连接到数据库。我也找不到与我收到的错误代码相关的任何文档。谢谢

【问题讨论】:

【参考方案1】:

尝试更新SQL Server驱动程序!!

您可能可以通过谷歌搜索“Download ODBC Driver for SQL Server”找到这些驱动程序。 就我而言,版本 17 或更高版本解决了这个问题。

另外,试试PDO-SQL-Server 示例(也许 PDO 实现有效)。

示例:

<?php  
function mssqlConnect() 
  $ServerName = "xxx";

  try   
    $conn = new PDO( "sqlsrv:server=$ServerName;Database = database", 'user', 'password');   
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );   
   catch( PDOException $e )   
     die( "Connection could not be established - " . $e->getMessage() );   
   

  echo "Connection established";
  return $conn;


function findEmployee($name) 
  $conn = mssqlConnect();
  $stmt = $conn->prepare('SELECT * FROM employees WHERE name = :name');
  if ($stmt->execute(array('name' => $name))) 
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
      // do something with $row
    
   else 
    echo 'Query error - ' . join(' ', $stmt->errorInfo());
  

  // Close connection which execute created.
  $stmt->closeCursor();


?>  

【讨论】:

哇,原来如此。我将服务器更新到版本 17(之前是版本 11)并更新了我的查询以包含 pdo sql 驱动程序。谢谢高手!! FWIW,答案是关于驱动程序,而不是服务器本身。此外,PDO API 和程序 API 都使用相同的核心,因此对一个适用的任何东西都应该适用于另一个。作为安装服务器更新的副作用,您可能获得了驱动程序更新。【参考方案2】:

尝试安装最新版本的 ODBC 驱动程序

https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review

以上是关于无法通过 XAMPP 连接到 SQL 数据库 - 驱动程序的 SQLSetConnectAttr 失败的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 Mariadb Xampp 数据库

无法使用便携式 Xampp 通过 Django 连接到 MySQL

GlassFish 无法连接到 mysql (XAMPP)

端口已转发,但仍无法连接到 XAMPP

无法使用 codeigniter 连接到 SQL SERVER 数据库

Dreamweaver CC无法通过PHP连接到我的本地XAMPP测试服务器