【问题标题】:Can't Cannect to SQL Server 2008 Express Database无法连接到 SQL Server 2008 Express 数据库
【发布时间】:2015-06-02 00:04:26
【问题描述】:

我正在尝试连接到 Microsoft SQL Server 2008 Express 数据库,但出现以下错误:

无法建立连接。数组 ( [0] => 数组 ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -1 [code] => -1 [2] => 无效选项 YSHSDB 已传递给 sqlsrv_connect。 [消息] => 无效选项 YSHSDB 已传递给 sqlsrv_connect。 ))

我在关注这个http://php.net/manual/en/function.sqlsrv-connect.php

PHP 代码:

<?php
    $serverName = "SERV002\SQLEXPRESS"; //serverName\instanceName
    array( "Database" => "YSHDB", "UID" => "sa", "PWD" => "myPassword" );
    $conn = sqlsrv_connect( $serverName, $connectionInfo);

    if ( $conn ) {
         echo "Connection established.<br />";
    } else {
         echo "Connection could not be established.<br />";
         die( print_r( sqlsrv_errors(), true));
    }
?>

编辑
我已经修复了那条线,现在我得到了这个:“无法建立连接。

数组 ( [0] => 数组 ( [0] => 08001 [SQLSTATE] => 08001 [1] => -1 [代码] => -1 [2] => [Microsoft][ODBC 驱动程序 11对于 SQL Server]SQL Server 网络接口:查找指定的服务器/实例时出错 [xFFFFFFFF]。[消息] => [Microsoft][适用于 SQL Server 的 ODBC 驱动程序 11]SQL Server 网络接口:查找指定的服务器/实例时出错 [xFFFFFFFF]。 ) [1] => Array ( [0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver 11 for SQL Server]登录超时expired [message] => [Microsoft][ODBC Driver 11 for SQL Server]登录超时过期)[2] => 数组([0] => 08001 [SQLSTATE] => 08001 [1] => -1 [code] => -1 [2] => [Microsoft][ODBC Driver 11 for SQL Server]建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到或无法访问服务器。检查实例是否名称是正确的,并且如果 SQL Server 配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。[消息] => [ Microsoft][ODBC Driver 11 for SQL Server]建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。 )

我已经检查了服务器是否允许远程连接,它确实允许

【问题讨论】:

  • 您提供的链接中的文档说要使用“UID”和“PWD”,但是您输入了“userName”和“password”,您似乎也有向后的参数:“UID”=>”萨"

标签: php sql-server sql-server-2008


【解决方案1】:

您的键/值对顺序错误。

PHP 的关联数组语法是:

array( key => value )

所以你的代码应该是:

array( "Database" => "YSHDB", "UID" => "sa", "PWD" => "myPassword" );

我确实注意到使用sa 帐户连接到 SQL Server 通常是不好的做法,而是使用 Windows 身份验证(使用 IIS 中的应用程序池标识或当前身份验证方案的用户)或至少一个每个应用程序的自定义 SQL授予最小权限集的服务器登录用户帐户。

作为社论:SQL Server 2008 现在已经过时 7 年(这就像在 2005 年运行 Windows NT 4),请考虑升级,尤其是出于安全原因。

【讨论】:

  • 已经完成了。为什么我要开始一个新问题?因为前面的问题已经回答了?
  • @FallenSoul,是的。当您发布的问题得到正确回答时,请接受有助于解决您的问题的正确答案。如果您在解决最初的问题后遇到了新问题,那么创建一个新问题将使其他有类似问题的人能够轻松搜索并找到准确的答案来帮助他们。一篇帖子中的多个问题更难获得良好的搜索结果,这对社区其他人的帮助更少。
【解决方案2】:

在我的情况下,问题是实例名称。如果使用默认实例名称,则无需设置实例名称。只需设置服务器名称即可。这是我的代码:

<?php
$serverName = "serverName"; 
$options = array(  "UID" => "sa",  "PWD" => "mypassword",  "Database" => "DBname");
$conn = sqlsrv_connect($serverName, $options);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
?>

您可以在这里了解更多信息:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/8b07a787-d2da-4336-b422-2e8199052d5e/sql-server-connection-timing-out?forum=sqldriverforphp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多