Signatur
Beschreibung
ibase_pconnect() stellt eine persistente Verbindung zu einer InterBase- oder Firebird-Datenbank her. Im Gegensatz zu ibase_connect() wird die Verbindung am Ende des Skripts nicht automatisch geschlossen, sondern bleibt im Verbindungs-Pool des Webservers erhalten. Bei einem erneuten Aufruf mit identischen Parametern wird die bereits bestehende Verbindung wiederverwendet, anstatt eine neue aufzubauen.
Dieses Verhalten ist besonders in Webanwendungen mit häufigen Datenbankzugriffen vorteilhaft, da das wiederholte Aufbauen und Schließen von Verbindungen entfällt und die Performance deutlich verbessert werden kann. Die Verbindungsparameter (Datenbankpfad, Benutzername, Passwort, Zeichensatz, Dialekt und Rolle) bestimmen die Eindeutigkeit einer persistenten Verbindung.
Bei Verwendung eines CGI-Webservers statt eines Modulbetriebsmodus (z. B. Apache mod_php) hat die Persistenz keinen praktischen Vorteil, da jeder Request einen eigenen Prozess erhält. Persistente Verbindungen sollten nur eingesetzt werden, wenn die Datenbankserver-Konfiguration ausreichend Verbindungen erlaubt und keine Transaktionen über Request-Grenzen hinweg offen gelassen werden.
Hinweis: Die InterBase-Erweiterung (ibase_*) wurde mit PHP 7.4 aus dem PHP-Kern entfernt und steht seitdem als PECL-Erweiterung (interbase bzw. php-firebird) zur Verfügung. Für aktuelle Projekte empfiehlt sich die Verwendung von PDO mit dem Firebird-Treiber.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $database | string | Verbindungszeichenkette zur Datenbank. Kann ein lokaler Pfad zur Datenbankdatei oder eine Netzwerkadresse im Format hostname:/pfad/zur/datenbank.fdb sein. |
|
| $username | string | Benutzername für die Datenbankverbindung. Standardmäßig wird die PHP-INI-Einstellung ibase.default_user verwendet. |
|
| $password | string | Passwort des Datenbankbenutzers. Standardmäßig wird die PHP-INI-Einstellung ibase.default_password verwendet. |
|
| $charset | string | Der Zeichensatz, der standardmäßig für die Verbindung verwendet werden soll, z. B. UTF8 oder ISO8859_1. |
|
| $buffers | int | 0 | Anzahl der Datenbank-Cache-Puffer für den serverseitigen Cache. Bei 0 wird der Standardwert des Servers verwendet. |
| $dialect | int | 3 | SQL-Dialekt, der für die Verbindung verwendet werden soll. Gültige Werte sind 1, 2 und 3. Für moderne Firebird-Datenbanken sollte 3 verwendet werden. |
| $role | string | SQL-Rolle, unter der die Verbindung hergestellt werden soll. Ermöglicht rollenbasierte Zugriffssteuerung auf der Datenbankebene. | |
| $sync | int | 0 | Gibt an, ob die Verbindung synchron hergestellt werden soll. In der Regel wird der Standardwert 0 verwendet. |
Rückgabewert
ibase_*-Funktionen verwendet werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Einfache persistente Verbindung zu einer lokalen Firebird-Datenbank
<?php
$host = 'localhost';
$dbpath = '/var/lib/firebird/data/meineprojekte.fdb';
$dbh = ibase_pconnect(
$host . ':' . $dbpath,
'sysdba',
'masterkey',
'UTF8',
0,
3
);
if ($dbh === false) {
die('Verbindung zur Datenbank fehlgeschlagen: ' . ibase_errmsg());
}
echo 'Persistente Verbindung erfolgreich hergestellt.';
$result = ibase_query($dbh, 'SELECT FIRST 5 * FROM KUNDEN');
while ($row = ibase_fetch_assoc($result)) {
echo $row['NAME'] . PHP_EOL;
}
ibase_free_result($result);
// Verbindung NICHT mit ibase_close() schließen, sie bleibt persistent erhalten
?>
Persistente Verbindung mit Rollenangabe für eingeschränkte Benutzer
<?php
$verbindung = ibase_pconnect(
'dbserver:/opt/firebird/daten/buchhaltung.fdb',
'buch_user',
'geheimesPasswort123',
'ISO8859_1',
0,
3,
'BUCHHALTUNG_ROLE'
);
if (!$verbindung) {
$fehler = ibase_errmsg();
error_log('Datenbankverbindung fehlgeschlagen: ' . $fehler);
die('Datenbankfehler. Bitte Administrator kontaktieren.');
}
// Transaktion starten
$trans = ibase_trans(IBASE_READ, $verbindung);
$abfrage = ibase_query($trans, 'SELECT RECHNUNGSNR, BETRAG FROM RECHNUNGEN WHERE BEZAHLT = 0');
$summe = 0.0;
while ($zeile = ibase_fetch_object($abfrage)) {
echo 'Rechnung ' . $zeile->RECHNUNGSNR . ': ' . number_format($zeile->BETRAG, 2, ',', '.') . ' EUR' . PHP_EOL;
$summe += $zeile->BETRAG;
}
echo 'Gesamtbetrag offen: ' . number_format($summe, 2, ',', '.') . ' EUR' . PHP_EOL;
ibase_free_result($abfrage);
ibase_rollback($trans);
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die gesamte ibase_*-Erweiterung wurde mit PHP 7.4 als veraltet markiert und mit PHP 8.0 aus dem PHP-Kern entfernt. Sie steht seitdem nur noch als PECL-Erweiterung zur Verfügung. Für neue Projekte sollte PDO mit dem Firebird-Treiber (PDO_Firebird) verwendet werden.
Persistenz-Fallstricke: Da persistente Verbindungen nicht automatisch geschlossen werden, können offene Transaktionen aus einem vorherigen Request in der wiederverwendeten Verbindung verbleiben. Es ist daher wichtig, alle Transaktionen explizit mit ibase_commit() oder ibase_rollback() abzuschließen, bevor das Skript endet.
Sicherheit: Datenbankpasswörter sollten niemals im Quellcode hart kodiert werden. Verwende Umgebungsvariablen oder sichere Konfigurationsdateien außerhalb des Webserver-Wurzelverzeichnisses, um Zugangsdaten zu speichern.
Verbindungspool: Bei einer großen Anzahl gleichzeitiger Requests kann der Verbindungspool schnell ausgeschöpft werden. Stelle sicher, dass die maximale Verbindungsanzahl des Firebird-Servers (MaxConnections) ausreichend dimensioniert ist.