Signatur
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
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);
?>
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);
?>
// 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.