Signatur
Beschreibung
fbird_pconnect() (auch bekannt als ibase_pconnect()) öffnet eine persistente Verbindung zu einer Firebird- oder InterBase-Datenbank. Im Gegensatz zu fbird_connect() wird die Verbindung am Ende des Skripts nicht geschlossen, sondern für nachfolgende Anfragen im Verbindungs-Pool des Web-Servers wiederverwendet. Das kann den Overhead von wiederholten Verbindungsaufbauten deutlich reduzieren.
Wird fbird_pconnect() mit identischen Parametern erneut aufgerufen, gibt PHP die bereits bestehende Verbindung zurück, statt eine neue zu öffnen. Die Verbindung bleibt solange aktiv, wie der PHP-Prozess (z. B. ein Apache-Worker) läuft. Das Skript-seitige Aufrufen von fbird_close() hat bei persistenten Verbindungen keine Wirkung.
Persistente Verbindungen eignen sich besonders für Umgebungen mit häufigen, kurzlebigen Anfragen (z. B. Web-Applikationen), bei denen der Verbindungsaufbau einen spürbaren Anteil der Antwortzeit ausmacht. Bei Datenbank-Transaktionen, die über das Skript-Ende hinaus offen blieben, kann es jedoch zu unerwarteten Zuständen kommen — Transaktionen werden beim Wiederbenutzen der Verbindung nicht automatisch zurückgerollt.
Hinweis: Die Funktionen der fbird_*-Familie sind Aliase der ibase_*-Funktionen und stehen über die Firebird-Erweiterung zur Verfügung. Ab PHP 8.4 wird die Erweiterung aus dem Core entfernt und als PECL-Paket weitergeführt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $database | string | Pfad zur Datenbankdatei auf dem Server, z. B. localhost:/var/db/meine.fdb. Wird der Parameter weggelassen, wird der zuletzt geöffneten Verbindung entsprochen. |
|
| $username | string | Benutzername für die Datenbankverbindung. Wird er nicht angegeben, greift der INI-Wert ibase.default_user. |
|
| $password | string | Passwort für den Datenbankbenutzer. Standardwert kommt aus ibase.default_password. |
|
| $charset | string | Zeichensatz, der für die Verbindung verwendet wird, z. B. UTF8 oder ISO8859_1. Standardwert kommt aus ibase.default_charset. |
|
| $buffers | int | Anzahl der Datenbank-Cache-Puffer, die serverseitig für diese Verbindung reserviert werden. 0 oder Weglassen bedeutet serverseitige Standardeinstellung. |
|
| $dialect | int | SQL-Dialekt der Verbindung (1, 2 oder 3). Standardwert ist Dialekt 3, der für moderne Firebird-Datenbanken empfohlen wird. |
|
| $role | string | SQL-Rolle (Role), unter der die Verbindung hergestellt wird, um granulare Zugriffsrechte zu nutzen. |
Rückgabewert
false zurückgegeben und ein Fehler ausgelöst.Beispiele
Einfache persistente Verbindung zu einer Firebird-Datenbank
<?php
$dbPath = 'localhost:/var/firebird/meine_app.fdb';
$user = 'SYSDBA';
$password = 'geheimesPasswort';
$conn = fbird_pconnect($dbPath, $user, $password, 'UTF8');
if ($conn === false) {
die('Verbindung fehlgeschlagen: ' . ibase_errmsg());
}
$result = fbird_query($conn, 'SELECT FIRST 5 * FROM KUNDEN');
while ($row = fbird_fetch_assoc($result)) {
echo $row['NAME'] . PHP_EOL;
}
// Hinweis: fbird_close() hat bei persistenten Verbindungen keinen Effekt
?>
Wiederverwendung einer persistenten Verbindung erkennen
<?php
// Beide Aufrufe mit identischen Parametern liefern dieselbe Ressource
$conn1 = fbird_pconnect('localhost:/var/firebird/test.fdb', 'SYSDBA', 'masterkey', 'UTF8');
$conn2 = fbird_pconnect('localhost:/var/firebird/test.fdb', 'SYSDBA', 'masterkey', 'UTF8');
if ($conn1 === $conn2) {
echo 'Persistente Verbindung wird wiederverwendet.' . PHP_EOL;
} else {
echo 'Neue Verbindung wurde geöffnet.' . PHP_EOL;
}
?>
// Wichtig · Fallstricke
Sicherheit: Benutzernamen und Passwörter niemals im Quellcode hart kodieren. Verwende stattdessen Umgebungsvariablen oder externe Konfigurationsdateien, die außerhalb des Web-Roots liegen.
Transaktionen: Offene Transaktionen, die beim Skript-Ende nicht committet oder zurückgerollt wurden, können bei der nächsten Wiederverwendung der Verbindung zu inkonsistentem Verhalten führen. Stelle sicher, dass jede Transaktion explizit mit fbird_commit() oder fbird_rollback() abgeschlossen wird.
Deprecation: Die fbird_*/ibase_*-Erweiterung wurde ab PHP 7.4 als veraltet markiert und ab PHP 8.4 aus dem PHP-Core entfernt. Für neue Projekte empfiehlt sich der Einsatz über PECL oder eine alternative Datenbankbibliothek.