2017-02-17 23 views
1

我正在處理一些PHP的東西,我試圖用sqlsrv_fetch_array()返回一組結果。但我注意到,如果查詢在管理工作室中返回x結果,則返回(x-1)實際PHP查詢結果。sqlsrv_fetch_array返回1比行數少

當我正在尋找一件東西時,這會成爲一個真正的問題,它不會返回任何東西。

的代碼如下:

function sqe($colname, $aq = NULL, $init = NULL) 
{ 
    global $connection; 
    $q = "SELECT TOP 2 * FROM tblname WHERE colname='" . $colName . "' ORDER BY colname DESC"; 

    $statement = sqlsrv_query($connection, $q); 

    if (sqlsrv_fetch_array($statement) === false) { 
     echo "Error fetching..."; 
     die(print_r(sqlsrv_errors(), true)); 
    } else { 
     $source = ""; 
     echo $q; 

     while ($row = sqlsrv_fetch_array($statement, SQLSRV_FETCH_ASSOC)){ 
      $source .= "<li><img src='data:image/png;base64," . $row['rowname'] . "' /></li>"; 
     } 
     echo ($source); 
     sqlsrv_free_stmt($statement); 
     die(); 
    } 
} 

我相信麻煩的是與while循環,但我不知道什麼實際使其返回1比它應該少。

任何想法?

+0

你介意[編輯](http://stackoverflow.com/posts/42300406/edit)你的問題顯示整個方法?從迄今爲止所做的,它應該工作。 –

+0

如果查詢結果相同,則結果不同(除非數據已更改)。也許你正在處理一些索引/數組「問題」(在PHP數組索引從0開始) –

+0

@ChrisForrence - 編輯它以完全反映發生了什麼。試着查看另一條評論關於索引的建議。 – Rich

回答

1

您的if語句會檢查sqlsrv_fetch_array($statement)是否爲false,但調用該方法會使內部遊標前進,使您的while循環從第一行開始,而不是第一行。

要查看查詢是失敗還是沒有返回任何行,您可以將$statement與false比較,也可以調用sqlsrv_has_rows

if ($statement === false || !sqlsrv_has_rows($statement)) { 

    // Either the query returned an error or no matches were found in the database 
} 
+0

你真是太棒了!非常感謝你! – Rich