如何使用sqlsrv api连接到PHP中的MSSQL?

时间:2011-11-07 05:19:20

标签: php

我正在尝试使用sqlsrv api连接到PHP中的MSSQL。当我运行 phpinfo()时,会显示 sqlsrv 的部分。但在实际编写代码时,我无法连接到MSSQL。我正在使用SQL Server R2。我使用指定的主机名从Management Studio连接到数据库。这是代码:

<?php
        $serverName = "TEST-PC\SQLEXPRESS";
        $databaseName = "TestDB";

        $connectionInfo = array("Database"=>"$databaseName");
        $conn = sqlsrv_connect( $serverName, $connectionInfo);
        if( $conn === false ){
            echo "Could not connect.\n";
            die( print_r( sqlsrv_errors(), true));
        }
        else{
            echo "Connection created";
        }
        $tsql = "SELECT * FROM Test";
        $result = sqlsrv_query($conn, $tsql);
        echo "Rows returned: ".sqlsrv_num_rows($result);
        sqlsrv_close();
    ?>

代码在页面上打印NOTHING,甚至没有任何错误消息。这是php.ini文件中的条目:

extension=php_sqlsrv_53_ts_vc9.dll
extension=php_pdo_sqlsrv_53_ts_vc9.dll

请帮忙吗?

3 个答案:

答案 0 :(得分:1)

由于您未传递用户或密码,因此驱动程序正在尝试通过Windows身份验证进行连接。通过从IIS运行PHP,它将连接任何用户IIS运行的凭据(例如NT AUTHORITY \ IUSR)。您需要将IIS用户添加到允许登录到SQL Server的列表中,然后将与该登录关联的用户添加到数据库中。

答案 1 :(得分:0)

您的意思是将“$ connectionOptions”放在“$ connectionOptions”中吗?

Turn on error_reporting for php for more verbose output.

[编辑]

一些可能的解决方案:

  1. 检查您要连接的MSSQL数据库的连接字符串属性(即您是否准确匹配这些值,或者您可以使用(本地)
  2. 您登录的用户可能无权访问数据库。这听起来有点过于简单,但请查看您的IIS设置以及FastCGI.impersonate设置。在IIS中启用IIS Windows身份验证设置,fastcgi.impersonate = 1.这里有关于此潜在问题的详尽文章:http://blogs.msdn.com/b/brian_swan/archive/2010/02/10/sql-server-driver-for-php-understanding-windows-authentication.aspx

答案 2 :(得分:0)

这是因为sqlsrv_query()默认使用SQLSRV_CURSOR_FORWARD游标类型。但是,为了从sqlsrv_num_rows()获得结果,您应该选择以下这些游标类型之一:

SQLSRV_CURSOR_STATIC SQLSRV_CURSOR_KEYSET SQLSRV_CURSOR_CLIENT_BUFFERED

有关详情,请查看:Cursor Types (SQLSRV Driver)

总之,请尝试此代码:

$tsql=sqlsrv_query("SELECT * FROM Test"); $row_count = sqlsrv_num_rows($tsql); echo $row_count;