首页 > 解决方案 > 使用 PHP 连接到远程 MSSQL 服务器不工作

问题描述

我在使用 PHP 版本为 7.3.5 连接到远程服务器时遇到问题

<?php
        
   $serverName = "domain ipaddress";//<computer>\<instance name> 
   $connectionOptions = array("Database"=>"databasename", "Uid"=>"user", "PWD"=>"password");  
   $conn = sqlsrv_connect($serverName, $connectionOptions);  
            
   if ($conn) {
      echo "connection was established";
   } else {
      echo "connection failed<br/>";
      die (print_r(sqlsrv_errors(), true));
   }
     
?>

错误消息如下:

[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]用户“user”登录失败。[消息] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]用户 'user' 登录失败。) [3] => 数组 ( [0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [代码] => 4060 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。登录失败。[消息] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。登录失败的。 ) )4060 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。登录失败。[消息] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。登录失败。) ) 4060 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。登录失败。[消息] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。登录失败。) )

现在,如果我从本地主机上的 WAMP 服务器运行代码并通过 Microsoft SQL Management Studio 在我的本地主机上运行数据库,代码就可以工作了

然后我可以连接。

标签: phpsql-serverodbcsqlsrv

解决方案


我遇到了完全相同的错误。

我可以通过从数组中删除数据库参数来进行连接,如下所示:

$server ="server_ip"; 
$username ="dbusername";
$password ="dbpassword";

$connectionInfo = array("UID" => $username, "PWD" => $password);
$link = sqlsrv_connect($server, $connectionInfo);

if( $link === false ) {
     die( print_r( sqlsrv_errors(), true));
}

显然,这意味着它只适用于指定了默认数据库的用户。我只需要连接到一个数据库,所以它对我有用。不确定为什么指定数据库会破坏它?


推荐阅读