Signatur
Beschreibung
odbc_num_rows() ermittelt die Anzahl der Zeilen, die eine ODBC-Abfrage geliefert hat. Die Funktion wird typischerweise nach einem SELECT-, INSERT-, UPDATE- oder DELETE-Statement eingesetzt, um festzustellen, wie viele Datensätze betroffen waren oder im Ergebnis vorhanden sind.
Wichtig: Für SELECT-Abfragen ist das Verhalten stark vom verwendeten ODBC-Treiber abhängig. Viele Treiber sind nicht in der Lage, die Anzahl der Ergebniszeilen vor dem vollständigen Durchlaufen des Ergebnissatzes zu ermitteln, und liefern in diesem Fall -1 zurück. Das zuverlässige Zählen von SELECT-Ergebnissen sollte daher über eine separate COUNT(*)-SQL-Abfrage erfolgen.
Bei DML-Operationen (INSERT, UPDATE, DELETE) ist die Rückgabe in der Regel zuverlässig, da die Anzahl der betroffenen Zeilen direkt vom Datenbanktreiber gemeldet wird.
Die Funktion ist Teil der ODBC-Erweiterung von PHP und eignet sich für die datenbankherstellerunabhängige Entwicklung über standardisierte ODBC-Schnittstellen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Eine ODBC-Ergebnis-Ressource, die zuvor durch odbc_exec() oder odbc_execute() erzeugt wurde. |
Rückgabewert
-1, wenn der ODBC-Treiber diese Information für SELECT-Abfragen nicht unterstützt oder die Zeilenanzahl nicht vor dem Durchlaufen des Ergebnissatzes bestimmt werden kann.Beispiele
Anzahl betroffener Zeilen nach UPDATE ermitteln
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
$sql = "UPDATE kunden SET status = 'aktiv' WHERE letzte_bestellung > '2024-01-01'";
$result = odbc_exec($conn, $sql);
if ($result) {
$anzahl = odbc_num_rows($result);
echo "Betroffene Zeilen: " . $anzahl . PHP_EOL;
} else {
echo 'Fehler: ' . odbc_errormsg($conn);
}
odbc_close($conn);
Treiber-Kompatibilität bei SELECT prüfen
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
$sql = "SELECT * FROM produkte WHERE kategorie = 'Elektronik'";
$result = odbc_exec($conn, $sql);
$anzahl = odbc_num_rows($result);
if ($anzahl === -1) {
// Treiber unterstützt Zeilenanzahl bei SELECT nicht
// Fallback: manuell zählen
$zaehler = 0;
while (odbc_fetch_row($result)) {
$zaehler++;
}
echo "Zeilen (manuell gezählt): " . $zaehler . PHP_EOL;
} else {
echo "Zeilen laut Treiber: " . $anzahl . PHP_EOL;
}
odbc_free_result($result);
odbc_close($conn);
// Wichtig · Fallstricke
Treiber-Abhängigkeit: Das Verhalten von odbc_num_rows() bei SELECT-Abfragen ist nicht standardisiert. Viele ODBC-Treiber (z. B. für MySQL über ODBC oder einige MSSQL-Treiber) liefern für SELECT grundsätzlich -1. Verlasse dich daher für die Ermittlung der Ergebnisanzahl bei SELECT-Abfragen nicht auf diese Funktion — nutze stattdessen SELECT COUNT(*) ....
Ressourcen freigeben: Nach der Verwendung des Ergebnis-Handles sollte odbc_free_result() aufgerufen werden, um Speicher freizugeben.