SQLSRV 不获取所有行

Posted

技术标签:

【中文标题】SQLSRV 不获取所有行【英文标题】:SQLSRV doesn't fetch all rows 【发布时间】:2017-09-12 06:29:26 【问题描述】:

我正在使用 php 的 sqlsrv 扩展,但在从简单查询中获取行时遇到问题。 我的查询是一个选择,它应该返回 133228 行,但是在尝试显示行时我只得到 15 行。 我已经搜索了答案,但找不到解决方案,这是我第一次使用此扩展程序。我已经找到了关于同一问题的上一个问题的答案,但在这种情况下,问题是 sqlsrv_fetch_array 的双重调用,我不确定。

这是我的查询:

$sql = 'select * from ViewProduct';
$params = array();
$options = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
$stmt = sqlsrv_query($dbRemote, $sql, $params, $options);
$count = sqlsrv_num_rows($stmt);

if ($count === false)
    echo "Error in retrieveing row count.";
else
echo $count;

//$rows = array();
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
    print_r($row);
    echo "<br>";
    //$rows[] = $row;

正如我所说,上面的查询在应该是 133228 行时返回 15。

我错过了什么? 提前谢谢你。

【问题讨论】:

您可以尝试禁用sqlsrv_num_rows 行并忽略$options(sqlsrv 将使用默认游标类型SQLSRV_CURSOR_FORWARD)。 【参考方案1】:

我有同样的问题, 这是我的解决方案

$data = [];
$result_num = false;
// get rows num if have any
$result_count_res = sqlsrv_query( 
                        $conn, 
                        $query, 
                        [],  
                        [ "Scrollable" => SQLSRV_CURSOR_KEYSET ]
                    );

if( $result_count_res === false) 
    echo "Row count false";
else
    // set row num
    $result_num = sqlsrv_num_rows( $result_count_res ); 
 

if($result_num)

    // run another query to retrive results
    $result_res = sqlsrv_query( 
                $conn, 
                $query, 
                [],  
                [ "Scrollable" => SQLSRV_CURSOR_FORWARD ]
            );

    if( $result_res === false) 

        // get errors from query
        die( print_r( sqlsrv_errors(), true) );

    else

        // run through "for" loop to retrive all results
        for($i = 0; $i < $result_num; $i++)
            $data[] = sqlsrv_fetch_array( $result_res, SQLSRV_FETCH_ASSOC);
        

       

    sqlsrv_free_stmt( $result_res );

else
    echo "Row count false";


echo '<pre>';
var_dump($data);
echo '</pre>';

【讨论】:

以上是关于SQLSRV 不获取所有行的主要内容,如果未能解决你的问题,请参考以下文章

sqlsrv_query 不返回行,长查询没有错误

SQL Server Driver for PHP之sqlsrv相关函数

sqlsrv函数 备用查询

sqlsrv_num_rows 不返回任何值

sqlsrv UPDATE 语句运行但不更新数据库

在第 7 行调用 C:\wamp\www\Webs\client.php 中未定义的函数 sqlsrv_connect()