【发布时间】: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