2013-07-17 131 views
1

我有以下SELECT語句在SQL Server查詢工具上「工作」並返回行。但是,當我在PHP上運行它時,它不會返回任何行。我知道連接和設置正在工作,因爲當我創建一個簡單的查詢,如「SELECT * from ...」可以工作。這是我的代碼。帶有sqlsrv_query的SELECT語句不返回結果

$tsql = "SELECT [d].[Device_Type_Name], 
      [a].[Company_ID] AS [Alliance], 
      [a].[Device_Address] 
      FROM [dbo].[AL_LKP_User_Device] AS [a] 
      INNER JOIN [dbo].[AL_LKP_User] AS [b] 
      ON [a].[Login_ID] = [b].[Login_ID] 
      INNER JOIN [dbo].[AL_LKP_NOTIFICATION_MASTER_LOG] AS [c] 
      ON [b].[Login_ID] = [c].[Login_ID] 
      INNER JOIN [dbo].[AL_LKP_Device_Type] AS [d] 
      ON [a].[Device_Type_ID] = [d].[Device_Type_ID]"; 

$stmt = sqlsrv_query($conn, $tsql); 
    if(!$stmt) 
    { 
     die(print_r(sqlsrv_errors(), true)); 
    } 

    $rows = sqlsrv_has_rows($stmt); 
    if ($rows === true) 
      echo "There are rows. <br />"; 
     else 
     echo "There are no rows. <br />"; 

我總是得到沒有行時,實際上有行。我需要在SQL語句中更改什麼?

+1

'sqlsrv_has_rows'可以返回false,如果沒有行,或者如果發生錯誤,可能是這裏的情況。你確定連接正常嗎?如果您嘗試從一個表格中進行簡單選擇,會怎樣? –

+0

是的,連接正在工作。如果我做了一個簡單的「SELECT * FROM [dbo]。[AL_LKP_User_Device]」,它工作並返回結果。 –

+0

你應該直接運行你的腳本(如sql)。然後,你會看到實際的結果。 –

回答

0

您應該將相同的運算符(===)更改爲等於運算符(==)。 你$行實際上應該包含的值,你可以測試通過做

print_r($rows) 

vardump($rows) 

我測試了這一點:

$rows = array(1=>"a",2=>"b"); 
if ($rows === true) 
echo "There are rows. <br />"; 
else 
echo "There are no rows. <br />"; 

這並返回「沒有行」但如果您將「===」更改爲「==」,則應該得到「有行」答案。

1 == 1是真的 1 === '1'是不正確的(左VAL是一個整數,另一個是字符串) 1 == '1'爲真(不考慮變量類型)

我希望這有助於。