PHP PDO sqlsrv 大结果集不一致

PHP PDO sqlsrv large result set inconsistency

我正在使用 PDO 执行一个查询,我期望得到大约 500K 个结果。这是我的查询:

SELECT Email FROM mytable WHERE flag = 1 

当我 运行 在 Microsoft SQL Server management Studio 中查询时,我始终得到 544838 个结果。我想在 PHP 中编写一个小脚本来为我获取这些结果。我最初的实现使用 fetchAll(),但这耗尽了 php 可用的内存,所以我决定像这样一次获取一个结果:

$q = <<<QUERY                                                                                           
SELECT Email FROM mytable WHERE flag = 1                                                      
QUERY;

$stmt = $conn->prepare($q);
$stmt->execute();

$c = 0;
while ($email = $stmt->fetch()[0]) {
    echo $email."   $c\n";
    $c++;
}

但每次我 运行 查询时,我都会得到不同数量的结果!典型的结果是:

445664
445836
445979

结果数量似乎不足 100K +/- 200 左右。任何帮助将不胜感激。

fetch() 方法一次从当前结果集中获取一行。 $stmt->fetch()[0] 是当前行的第一列。

您的 sql 查询没有顺序并且可以有一些 null 或空值(可能)。

由于是在while循环中控制该列的值,如果当前行的第一个值为null,则退出循环。

因此,您应该只控制 fetch(),而不是 fetch()[0] 或类似的东西。

此外,在 while 循环内,使用 sqlsrv_get_field() 按索引访问列。

$c = 0;
while ($stmt->fetch()) { // You may want to control errors
   $email = sqlsrv_get_field($stmt, 0); // get first column value
   // $email can be false on errors

   echo $email . "   $c\n";
   $c++;
}

sqlsrv_fetch