2012-09-12 132 views
0

我的問題基本上圍繞着我需要/寧願使用PHP的sqlsrv訪問sql-server 2000數據庫。我已經在使用sql server 2005來運行所有查詢的項目,並且切換到類似ODBC的PHP驅動程序,現在是一個非常頭痛的問題。因此,現在我已將原始SQL Server 2000數據庫和2005安裝在同一臺計算機上,並且已在兩臺服務器之間創建了一個鏈接服務器。在Management Studio Express中對其中一個表運行簡單查詢來測試它。SQLSRV與鏈接服務器

現在,我在PHP中使用完全相同的查詢使用sqlsrv_query並運行到錯誤。我的PHP代碼測試了這一點看起來像這樣

$connectionOptions = array("UID"=>"user","PWD"=>"password"); 
$res = sqlsrv_connect("(local)\SQLExpress", $connectionOptions); 
if(!$res) die("ERRORS : " . print_r(sqlsrv_errors()));  
echo "SELECT * FROM [ServerName].DB.dbo.Table<br/>"; 
$res = sqlsrv_query($res,"SELECT * FROM [ServerName].DB.dbo.Table"); 

if($res===false){ 
    die("ERRORS : " . print_r(sqlsrv_errors())); 
}else{ 
     var_dump($res); 
    $ary = sqlsrv_fetch_array($res); 
} 

var_dump($ary); 

echo "<hr>"; 
var_dump(sqlsrv_errors()); 

這段代碼的問題是,sqlsrv_query的結果,不返回false,但返回類型未知的資源(11)。因此,在該結果上運行fetch_array會告訴我一個無效參數已傳遞給sqlsrv_fetch_array。我不確定此時該做什麼。通過sqlsrv在鏈接服務器上運行查詢是否存在問題?

+0

我對PHP並不熟悉,但查看錶的模式可能有助於顯示可能導致問題的任何不尋常的字段......想知道是否有字段類型不是它從數據庫返回到您的代碼... –

回答

0

嗯,我想出了問題。我急於做一些代碼來測試鏈接服務器是否工作,我只是使用相同的變量名作爲sqlsrv_connect和sqlsrv_query的結果。原來,這是整個問題。我切換變量名稱,以便連接對象是$ Link,並且查詢保持爲$ res。現在,我可以訪問2005年到2000年試圖通過的數據庫。因此,在將來,我肯定會更仔細地將變量命名一些,所以我不會把頭撞到牆上幾個小時。

0

在您的代碼中似乎沒有錯誤。

請在循環中嘗試fetch_array並更新結果。

while($row = sqlsrv_fetch_array($result)) 
{ 
    echo($row['field_name']); 
} 

也刪除var_dump($ary);

通常即使在使用「$行」中的數據顯示任何錯誤,錯誤信息將顯示與「sqlsrv_fetch_array」的問題。