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++;
}
我正在使用 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++;
}