If you are doing more than one mssql_query(), you must do a mssql_free_result() to avoid undesirable results of 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
Diese Funktion wurde mit PHP 7.0.0 ENTFERNT.
$result
) : intGibt den nächsten Stapel von Datensätzen zurück.
result
Der Bezeichner des Ergebnisses, das ausgewertet wird. Dieses Ergebnis stammt von einem Aufruf von mssql_query().
Gibt die Anzahl der Datensätze im zurückgegeben Stapel zurück.
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
}
?>
If you are doing more than one mssql_query(), you must do a mssql_free_result() to avoid undesirable results of mssql_fetch_batch()
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.
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
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
?>