sqlsrv_fetch_array返回1比行数少

时间:2017-02-17 14:30:05

标签: php sql

我正在研究一些PHP的东西,我试图使用sqlsrv_fetch_array()来返回一组结果。我注意到,如果查询在管理工作室中返回x结果,则返回(x-1)结果为实际的PHP查询。

当我搜索单个内容时,这成为一个真正的问题,它什么都不返回。

代码如下:

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的程度是什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的if语句检查sqlsrv_fetch_array($statement)是否为false,但是调用该方法会使内部游标前进,使得while循环以 second 行而不是第一行开始。

要查看查询是失败还是未返回任何行,您可以将$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
}