I was having issues doing two different select queries with batch sizes in the same connection. The first one would run fine, the second one would always return one batch + 1 record (ie. batch size on the 2nd query was 250000 records, it would stop after 250001 and say it was complete even though there should have been 3m+ records).
I was able to overcome this by disconnecting from the DB (via mssql_close($conn);) and reconnecting before I ran the second query. Now my second query returns all the records I need.
Though I would write this here as there is little to no documentation on this issue, and it may only be affecting me. I am connecting from Linux (RHEL5) to SQL Server 2005 on the network, using FreeTDS. If you have this same issue, try the above and it may work for you.
mssql_fetch_batch
(PHP 4 >= 4.0.4, PHP 5, PECL odbtp >= 1.1.1)
mssql_fetch_batch — Liefert den nächsten Stapel von Datensätzen
Beschreibung
int mssql_fetch_batch
( resource
$result
)Gibt den nächsten Stapel von Datensätzen zurück.
Parameter-Liste
-
result -
Der Bezeichner des Ergebnisses, das ausgewertet wird. Dieses Ergebnis stammt von einem Aufruf von mssql_query().
Rückgabewerte
Gibt die Anzahl der Datensätze im zurückgegeben Stapel zurück.
Beispiele
Beispiel #1 mssql_fetch_batch()-Beispiel
<?php
// Mit MSSQL verbinden und Datenbank auswählen
$verbindung = mssql_connect('MANGO\SQLEXPRESS', 'sa', 'phpfi');
mssql_select_db('php', $verbindung);
// Eine Anfrage senden
$anfrage = mssql_query('SELECT * FROM [php].[dbo].[people]', $verbindung, 100);
$datensaetze = 10;
while ($datensaetze >= 0) {
while ($datensatz = mssql_fetch_assoc($anfrage)) {
// Tue irgendwas ...
}
--$datensaetze;
}
if ($stapelgroesse = mssql_fetch_batch($anfrage)) {
// $stapelgroesse ist die Anzahl der restlichen Datensätze aus der
// Anfrage, die oben nicht angezeigt wurden
}
?>
jeffreznik ¶
2 months ago
doug dot pe at gmail dot com ¶
9 months ago
This demonstrates the return value:
<?php
$connect = mssql_connect("databasename", "username", "password");
$sql = "SELECT * FROM huge_table"; // returns 3271 rows, for example
$qry = mssql_query($SQL, $connect, 1000); // 1000 Rows batchsize
$batchsize = mssql_num_rows($qry);
print "$batchsize <br />\r\n";
do {
$batchsize = mssql_fetch_batch($qry);
print "$batchsize <br />\r\n";
} while ($batchsize); // get the next batch until end
?>
returns:
1000
1000
1000
271
0
brutalex430 ¶
2 years ago
This could be usefull if you have a large dataset:
<?php
$qry = mssql_query("SELECT * FROM huge_table", $conn, 1000); // 1000 Rows batchsize
do {
while ($row = mssql_fetch_row($qry)) {
// do something like
print_r($row);
}
} while (mssql_fetch_batch($navqry)); // get the next batch until end
?>
