Start · Sprachen · PHP · Referenz · odbc_num_rows

odbc_num_rows

Funktion

Gibt die Anzahl der Zeilen zurück, die von einer ODBC-Abfrage betroffen oder zurückgeliefert wurden.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_num_rows(resource $statement): int

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

Typ
int
Beschreibung
Gibt die Anzahl der betroffenen oder zurückgelieferten Zeilen als Integer zurück. Liefert -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);
Betroffene Zeilen: 42

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);
Zeilen laut Treiber: -1 Zeilen (manuell gezählt): 15

// 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.