Signatur
Beschreibung
oci_num_rows() liefert die Anzahl der Zeilen, die durch das zuletzt ausgeführte SQL-Statement tatsächlich verändert wurden. Die Funktion ist besonders nützlich nach DML-Operationen wie INSERT, UPDATE oder DELETE, um zu prüfen, ob und wie viele Datensätze betroffen waren.
Wichtig: Bei SELECT-Statements gibt oci_num_rows() nicht die Anzahl der gefundenen Ergebniszeilen zurück. Für diesen Zweck muss man alle Zeilen abrufen und selbst zählen, da Oracle ergebnisbasierte Cursor-Abfragen inkrementell verarbeitet.
Die Funktion wird typischerweise nach einem erfolgreichen Aufruf von oci_execute() eingesetzt. Gibt false zurück, wenn das übergebene Statement-Handle ungültig ist oder ein Fehler aufgetreten ist.
- Geeignet für DML-Statements:
INSERT,UPDATE,DELETE,MERGE - Nicht geeignet, um die Ergebnisanzahl von
SELECT-Abfragen zu ermitteln
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges OCI8-Statement-Handle, das mit oci_parse() erzeugt und mit oci_execute() ausgeführt wurde. |
Rückgabewert
false zurück, wenn ein Fehler aufgetreten ist oder das Statement-Handle ungültig ist.Beispiele
Anzahl gelöschter Zeilen ermitteln
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = "DELETE FROM bestellungen WHERE status = 'storniert'";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);
$anzahl = oci_num_rows($stmt);
echo "Gelöschte Datensätze: " . $anzahl . PHP_EOL;
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
?>
Überprüfen, ob ein UPDATE tatsächlich Zeilen verändert hat
<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}
$sql = "UPDATE produkte SET preis = preis * 1.05 WHERE kategorie = :kat";
$stmt = oci_parse($conn, $sql);
$kategorie = 'Elektronik';
oci_bind_by_name($stmt, ':kat', $kategorie);
oci_execute($stmt);
$betroffene = oci_num_rows($stmt);
if ($betroffene > 0) {
echo "Preise von {$betroffene} Produkt(en) wurden aktualisiert." . PHP_EOL;
oci_commit($conn);
} else {
echo "Keine Produkte in dieser Kategorie gefunden." . PHP_EOL;
oci_rollback($conn);
}
oci_free_statement($stmt);
oci_close($conn);
?>
// Wichtig · Fallstricke
Achtung bei SELECT-Statements: oci_num_rows() gibt bei SELECT-Abfragen nicht die Gesamtanzahl der Ergebniszeilen zurück. Stattdessen wird nur die Anzahl der bisher abgerufenen Zeilen zurückgeliefert, was zu irreführenden Ergebnissen führen kann. Für SELECT COUNT(*)-Abfragen sollte stattdessen der Wert direkt aus dem Ergebnis gelesen werden.
Die Funktion ist Teil der OCI8-Erweiterung und steht nur zur Verfügung, wenn PHP mit Oracle-Unterstützung kompiliert wurde (--with-oci8). Ohne diese Erweiterung führt der Aufruf zu einem fatalen Fehler.