通过PHP连接到SQL Server 2008

时间:2012-02-13 01:00:43

标签: php sql-server-2008 wamp

我需要通过PHP(WAMP,最新版本)连接到SQL Server 2008。我安装并设置了sqlsrv驱动程序,它们确实显示在phpinfo()

我正在使用以下行连接到我的数据库,使用Windows身份验证:

$serverName = "(local)";
$connectionOptions = array("Database"=>"MyTestDatabase");
$conn = sqlsrv_connect( $serverName, $connectionOptions) or die("Error!");

我收到以下错误:

Array 
( 
    [0] => Array 
    ( 
        [0] => IMSSP 
        [SQLSTATE] => IMSSP 
        [1] => -49
        [code] => -49 
        [2] => This extension requires the Microsoft SQL Server 2011 Native Client. Access the following URL to download the Microsoft SQL Server 2011 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712 
        [message] => This extension requires the Microsoft SQL Server 2011 Native Client. Access the following URL to download the Microsoft SQL Server 2011 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712
    ) 
    [1] => Array 
    ( 
        [0] => IM002 
        [SQLSTATE] => IM002 
        [1] => 0 
        [code] => 0 
        [2] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
        [message] => [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    )
)

任何帮助都会很棒,但请具体说明,因为除了一些基础知识之外,我真的不知道我的方式。

3 个答案:

答案 0 :(得分:3)

该错误是由注册表中的权限问题引起的。存在一个密钥,其中存储了本机客户端的路径,并且您在应用程序池中使用的标识被拒绝访问。

  • 下载Process Monitor并按照此帖子上的说明操作:      http://www.iislogs.com/articles/processmonitorw3wp/(本教程介绍如何在IIS上执行此操作,使用WAMP,您需要找到在内存上运行的.exe进程)
  • 查找拒绝访问进程w3wp.exe的注册表项。在IIS的情况下,不确定WAMP中进程的名称是什么,但程序是相同的。 就我而言:

    HKLM\Software\ODBC\ODBCINST.INI\SQL Native Client 10.0
    
  • 运行regedit并找到密钥
  • 右键单击并转到权限
  • 将网络服务添加到列表并为其授予读取权限。
  • 回收应用程序池,它应该可以正常工作

答案 1 :(得分:2)

sqlsrv_connect PHP manual

尝试这种方法来查看错误实际是什么:

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

答案 2 :(得分:2)

根据您的设置,您可能需要恢复为mssql_connect及相应的功能。这适用于mssql 2008,你通常不会失去有意义的功能。

以下是设置与数据库的连接的示例。根据您的配置,您可能需要添加端口信息等。

$hostname = "server.domain.com";
$database = "DatabaseName";
$username = "LocalSQLUserName";
$password = "P@ssw0rd";
$Connection = mssql_connect($hostname, $username, $password);

如果您在XAMP环境中运行,那么您可以在本地运行所有内容。如果是这种情况,您的服务器将是localhost127.0.0.1,您可以在SQL中定义自己的帐户。正如我所说,我自己不使用Windows帐户,但您可以将NT帐户添加到“服务器”,然后在SQL Server管理工具中设置该用户可以访问您正在使用的数据库。然后,您已设置帐户和密码,并知道它们是什么。如果您在使用该帐户时遇到问题,可以尝试computerName\userName

如果您不是管理员,则需要从他们那里获取相关信息。