Start · Sprachen · PHP · Referenz · ibase_gen_id

ibase_gen_id

Funktion

Inkrementiert den benannten Generator (Sequence) in einer Firebird/InterBase-Datenbank um den angegebenen Wert und gibt den neuen Generatorwert zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_gen_id(string $generator, int $increment = 1, resource $link_identifier = null): int|string|false

Beschreibung

ibase_gen_id() ermöglicht den direkten Zugriff auf benannte Generatoren (auch Sequences genannt) in Firebird- und InterBase-Datenbanken. Ein Generator ist ein datenbankweites Zählobjekt, das atomare, eindeutige Ganzzahlwerte erzeugt – vergleichbar mit AUTO_INCREMENT in MySQL oder SEQUENCE in PostgreSQL.

Die Funktion erhöht den aktuellen Wert des angegebenen Generators um den Wert von $increment und gibt den neuen Wert zurück. Der Vorgang ist atomar, sodass auch in Mehrbenutzer-Umgebungen keine doppelten Werte entstehen.

Typischerweise wird ibase_gen_id() verwendet, bevor ein INSERT-Statement ausgeführt wird, um einen eindeutigen Primärschlüssel zu ermitteln und diesen anschließend im Datensatz zu speichern. Mit einem negativen $increment kann der Generator auch dekrementiert werden; ein $increment von 0 liest den aktuellen Wert, ohne ihn zu verändern.

Hinweis: Die gesamte ibase_*-Erweiterung gilt als veraltet und wurde in PHP 8.0 aus dem PHP-Kern entfernt. Sie steht seither nur noch über die PECL-Erweiterung ibase oder das separate FirebirdSQL-Paket zur Verfügung.

Parameter

Name Typ Default Beschreibung
$generator Pflicht string Name des Generators (Sequence) in der Datenbank, so wie er mit CREATE GENERATOR bzw. CREATE SEQUENCE angelegt wurde. Groß-/Kleinschreibung ist abhängig von der Datenbankeinstellung.
$increment int 1 Wert, um den der Generator erhöht wird. Standardmäßig 1. Ein negativer Wert dekrementiert den Generator, 0 liest nur den aktuellen Wert ohne Änderung.
$link_identifier resource null Eine Verbindungsressource, die mit ibase_connect() oder ibase_pconnect() erzeugt wurde. Wird kein Wert übergeben, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
int|string|false
Beschreibung
Gibt den neuen Wert des Generators als Ganzzahl zurück. Auf 32-Bit-Systemen kann der Wert als string zurückgegeben werden, wenn er den Integer-Bereich überschreitet. Im Fehlerfall wird false zurückgegeben.

Beispiele

Neuen Primärschlüssel vor einem INSERT ermitteln

<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');

// Generator-Wert holen, um ihn als Primärschlüssel zu verwenden
$newId = ibase_gen_id('GEN_CUSTOMERS_ID', 1, $dbh);

if ($newId === false) {
    die('Fehler beim Generieren der ID: ' . ibase_errmsg());
}

$name = 'Max Mustermann';
$sql  = "INSERT INTO CUSTOMERS (ID, NAME) VALUES ({$newId}, ?)"; 
$stmt = ibase_prepare($dbh, $sql);
ibase_execute($stmt, $name);
ibase_commit($dbh);

echo "Neuer Datensatz mit ID: {$newId} wurde angelegt.";

ibase_close($dbh);
?>
Neuer Datensatz mit ID: 42 wurde angelegt.

Aktuellen Generatorwert auslesen ohne Erhöhung

<?php
$dbh = ibase_connect('localhost:/var/lib/firebird/mydb.fdb', 'sysdba', 'masterkey');

// Increment = 0 liest den Wert ohne Änderung
$currentValue = ibase_gen_id('GEN_ORDERS_ID', 0, $dbh);

echo "Aktueller Wert von GEN_ORDERS_ID: {$currentValue}";

ibase_close($dbh);
?>
Aktueller Wert von GEN_ORDERS_ID: 105

// Wichtig · Fallstricke

Deprecation / Entfernung: Die ibase_*-Funktionen wurden in PHP 7.4 als veraltet markiert und in PHP 8.0 vollständig aus dem PHP-Kern entfernt. Für aktuelle Projekte sollte stattdessen die PECL-Erweiterung ibase oder die Firebird PDO-Erweiterung (pdo_firebird) verwendet werden.

Atomarität: Der Generator-Zugriff erfolgt außerhalb einer Transaktion direkt auf Datenbankebene. Das bedeutet, ein Rollback der aktuellen Transaktion setzt den Generatorwert nicht zurück. Lücken in der ID-Folge sind daher normal und zu erwarten.

Sicherheit: Den zurückgegebenen Generatorwert niemals direkt und ungefiltert in SQL-Strings einbetten, wenn die Herkunft nicht sicher ist. Da es sich jedoch um einen datenbankinternen Ganzzahlwert handelt, ist das Risiko bei korrekter Nutzung gering.