我正在使用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。任何帮助将不胜感激。
答案 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++;
}