【问题标题】:Connect to remote MSSQL server with PHP not working使用 PHP 连接到远程 MSSQL 服务器不工作
【发布时间】:2020-11-13 13:34:37
【问题描述】:

我在使用 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));
   }
     
?>

错误信息如下:

数组([0] => 数组([0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [代码] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL 服务器]用户“用户”登录失败。 [消息] => [微软][ODBC 用于 SQL Server 的驱动程序 17][SQL Server]用户“用户”登录失败。 ) [1] => 数组([0] => 42000 [SQLSTATE] => 42000 [1] => 4060 [代码] => 4060 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开登录请求的数据库“databasename”。这 登录失败。 [消息] => [Microsoft][ODBC Driver 17 for SQL 服务器][SQL Server]无法打开请求的数据库“databasename” 登录。登录失败。 ) [2] => 数组 ([0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [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 [code] => 4060 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无法打开请求的数据库“databasename” 登录。登录失败。 [消息] => [Microsoft][ODBC 驱动程序 17 对于 SQL Server][SQL Server]无法打开数据库“databasename” 登录请求。登录失败。 ))

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

然后我可以连接了。

【问题讨论】:

  • 错误信息很清楚 - 用户名和/或密码错误。远程 SQL Server 是否有名为 user 和密码 password 的 SQL 登录名?
  • @Zhorov。是的,用户名和密码是正确的,我已经检查并仔细检查了。只想确认一下。我可以看到我在日志上收到了对服务器的请求,但它被拒绝了。这就是错误消息中的全部内容
  • 那么数据库databasename是否存在于远程服务器中?
  • 我认为数据库名称更可能是问题所在 - 除非它已经成功验证了 SQL 登录名和密码,否则它不会尝试切换到该数据库。数据库不存在于服务器上,或者 SQL 登录没有相应的用户映射授予其访问该数据库的权限。
  • @AlwaysLearning 正确,我能够重现第一个场景(现有 SQL 登录和缺少数据库),但可能权限将是此处错误的原因。

标签: php sql-server odbc sqlsrv


【解决方案1】:

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

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

$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));
}

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

【讨论】:

    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多