2011-11-07 59 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;