2011-11-07 57 views
0

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

<?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(); 
    ?> 

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

extension=php_sqlsrv_53_ts_vc9.dll 
extension=php_pdo_sqlsrv_53_ts_vc9.dll 

请帮忙吗?

+0

对不起,忘了提及我在IIS 7上运行的网站nd不在Apache上。 –

回答

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
+0

对不起........误印**这里**。它是$ connectionInfo,而不是实际代码中的$ connectionOptions。 –

+0

您可以在本地连接到您的数据库,它使用Windows身份验证或用户名/密码吗?如果是后者,那么你需要在你的$ connectionInfo中包含这个 –

+0

另外,确保你的SQL服务器正在运行 –

1

既然你没有通过一个用户名或密码,司机正试图通过连接Windows身份验证。通过从IIS运行PHP,它将连接任何用户IIS运行的凭据(例如NT AUTHORITY \ IUSR)。您需要将IIS用户添加到允许登录到SQL Server的列表中,然后将与该登录关联的用户添加到数据库。

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;