Start · Sprachen · PHP · Referenz · ibase_affected_rows

ibase_affected_rows

Funktion

Gibt die Anzahl der Zeilen zurück, die von der zuletzt ausgeführten INSERT-, UPDATE- oder DELETE-Abfrage auf einer Firebird/InterBase-Datenbankverbindung betroffen waren.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_affected_rows(resource $link_identifier = null): int

Beschreibung

ibase_affected_rows() ermittelt, wie viele Datensätze durch die zuletzt ausgeführte DML-Anweisung (INSERT, UPDATE, DELETE) tatsächlich verändert wurden. Dies ist besonders nützlich, um nach einem UPDATE oder DELETE zu prüfen, ob und wie viele Zeilen wirklich angepasst wurden, ohne eine separate COUNT-Abfrage ausführen zu müssen.

Die Funktion ist Teil der ibase_*-Erweiterung für Firebird- und InterBase-Datenbanken. Wird kein $link_identifier übergeben, wird die zuletzt geöffnete Verbindung verwendet. Der Rückgabewert bezieht sich stets auf die letzte ausgeführte Anweisung auf der angegebenen Verbindung.

Typische Anwendungsfälle sind die Validierung von Datenbankoperationen (z. B. prüfen, ob ein UPDATE tatsächlich einen Datensatz gefunden und verändert hat) sowie das Loggen von Massenoperationen, bei denen die Anzahl der geänderten Zeilen protokolliert werden soll.

Hinweis: Die ibase_*-Funktionen wurden in PHP 8.0 aus dem PHP-Core entfernt und stehen seitdem nur noch über die externe PECL-Erweiterung ibase bzw. firebird zur Verfügung.

Parameter

Name Typ Default Beschreibung
$link_identifier resource null Eine Firebird/InterBase-Verbindungsressource, die mit ibase_connect() oder ibase_pconnect() erzeugt wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der Zeilen zurück, die von der zuletzt ausgeführten INSERT-, UPDATE- oder DELETE-Anweisung betroffen waren. Bei einer SELECT-Abfrage oder wenn keine Verbindung aktiv ist, wird 0 zurückgegeben.

Beispiele

Anzahl aktualisierter Zeilen nach einem UPDATE

<?php
$dbh = ibase_connect('localhost:/path/to/database.fdb', 'user', 'password');

$sql = "UPDATE produkte SET preis = preis * 1.10 WHERE kategorie = 'Elektronik'";
ibase_query($dbh, $sql);

$anzahl = ibase_affected_rows($dbh);
echo "Aktualisierte Zeilen: " . $anzahl;

ibase_close($dbh);
?>
Aktualisierte Zeilen: 42

Prüfen, ob ein DELETE-Befehl einen Datensatz gefunden hat

<?php
$dbh = ibase_connect('localhost:/path/to/database.fdb', 'user', 'password');

$id = 99;
$sql = "DELETE FROM bestellungen WHERE id = " . (int)$id;
ibase_query($dbh, $sql);

$betroffene = ibase_affected_rows($dbh);

if ($betroffene > 0) {
    echo "Datensatz mit ID $id wurde erfolgreich gelöscht.";
} else {
    echo "Kein Datensatz mit ID $id gefunden.";
}

ibase_close($dbh);
?>
Kein Datensatz mit ID 99 gefunden.

// Wichtig · Fallstricke

Deprecation/Entfernung: Die gesamte ibase_*-Erweiterung wurde mit PHP 8.0 aus dem PHP-Core entfernt. Für PHP 8.x und neuer muss die Funktionalität über die PECL-Erweiterung ibase oder firebird nachinstalliert werden. Neue Projekte sollten PDO mit dem Firebird-Treiber (PDO_Firebird) verwenden.

Sicherheitshinweis: Werte, die in SQL-Abfragen verwendet werden, sollten niemals direkt aus Benutzereingaben übernommen werden. Da ibase_* keine Prepared Statements im modernen Sinne bietet, empfiehlt sich die explizite Typumwandlung (z. B. (int)$id) oder die Verwendung von ibase_execute() mit parametrisierten Abfragen.