2017-02-17 120 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