PHP PDO sqlsrv大结果集不一致

时间:2018-01-17 16:28:33

标签: php pdo sqlsrv

我正在使用PDO执行一个查询,我期待~500K的结果。这是我的问题:

SELECT Email FROM mytable WHERE flag = 1 

当我在Microsoft SQL Server管理工作室中运行查询时,我始终获得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 ish。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

你的sql查询没有排序,可能有一些空值或空值(可能)。

由于您在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