Signatur
Beschreibung
Pdo\Firebird ist eine spezialisierte Unterklasse von PDO, die den nativen PDO-Treiber für Firebird- und InterBase-Datenbanken kapselt. Seit PHP 8.4 werden datenbankspezifische PDO-Treiber als eigene Klassen bereitgestellt, sodass treiberspezifische Methoden und Konstanten klar voneinander getrennt sind.
Die Klasse wird wie die Standard-PDO-Klasse über deren Konstruktor instanziiert, wobei als DSN das Präfix firebird: verwendet wird. Damit lassen sich sowohl lokale als auch entfernte Firebird-Datenbankserver ansprechen. Alle Standard-PDO-Methoden wie query(), prepare(), exec() und Transaktionsverwaltung stehen zur Verfügung.
Typische Einsatzgebiete sind Legacy-Systeme, die auf Firebird oder InterBase aufsetzen, sowie neue Projekte, die von den ACID-konformen Transaktionen und der Mehrversionskontrolle (MVCC) von Firebird profitieren wollen. Gegenüber der älteren ibase_*-Erweiterung bietet PDO eine portable, objektorientierte API.
- DSN-Format:
firebird:dbname=hostname/port:/pfad/zur/datenbank.fdb - Unterstützt vorbereitete Anweisungen mit benannten (
:name) und positionellen (?) Platzhaltern - Transaktionen werden über
beginTransaction(),commit()undrollBack()gesteuert
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dsn Pflicht | string | Der Data Source Name im Format firebird:dbname=host/port:/pfad/db.fdb. Für lokale Datenbanken genügt firebird:dbname=/pfad/zur/db.fdb. |
|
| $username | string | Benutzername für die Datenbankverbindung, z. B. SYSDBA. |
|
| $password | string | Passwort des Datenbankbenutzers. | |
| $options | array | [] | Assoziatives Array mit PDO-Treiberoptionen, z. B. PDO::ATTR_ERRMODE oder Firebird-spezifische Optionen wie Zeichensatz (charset). |
Rückgabewert
Beispiele
Verbindung zu einer lokalen Firebird-Datenbank herstellen
<?php
try {
$pdo = new Pdo\Firebird(
dsn: 'firebird:dbname=localhost:/var/lib/firebird/data/meine_db.fdb;charset=UTF8',
username: 'SYSDBA',
password: 'masterkey',
options: [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
$stmt = $pdo->query('SELECT FIRST 5 RDB$RELATION_NAME FROM RDB$RELATIONS');
foreach ($stmt as $row) {
echo trim($row['RDB$RELATION_NAME']) . PHP_EOL;
}
} catch (PDOException $e) {
echo 'Verbindungsfehler: ' . $e->getMessage();
}
Vorbereitete Anweisung mit Transaktion
<?php
try {
$pdo = new Pdo\Firebird(
'firebird:dbname=localhost:/var/lib/firebird/data/shop.fdb;charset=UTF8',
'SYSDBA',
'masterkey',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$pdo->beginTransaction();
$stmt = $pdo->prepare(
'INSERT INTO BESTELLUNGEN (KUNDEN_ID, ARTIKEL, MENGE) VALUES (:kid, :art, :menge)'
);
$stmt->execute([
':kid' => 42,
':art' => 'Feuervogel-Tasse',
':menge' => 3,
]);
$pdo->commit();
echo 'Bestellung erfolgreich gespeichert.';
} catch (PDOException $e) {
$pdo->rollBack();
echo 'Fehler: ' . $e->getMessage();
}
// Wichtig · Fallstricke
Verfügbarkeit: Pdo\Firebird als eigene Klasse existiert erst ab PHP 8.4. In älteren PHP-Versionen wird der Firebird-Treiber über die generische PDO-Klasse mit dem DSN-Präfix firebird: angesprochen — die Funktionalität ist dieselbe, es gibt jedoch keine treiberspezifische Klasse.
Erweiterung erforderlich: Die PHP-Erweiterung pdo_firebird muss kompiliert oder als gemeinsam genutztes Modul geladen sein (extension=pdo_firebird in der php.ini). Zusätzlich wird die Firebird-Clientbibliothek auf dem Server benötigt.
Sicherheit: Verwende grundsätzlich vorbereitete Anweisungen mit Platzhaltern, um SQL-Injection zu verhindern. Speichere Zugangsdaten niemals im Quellcode — nutze Umgebungsvariablen oder Konfigurationsdateien außerhalb des Web-Roots.
Zeichensatz: Gib im DSN immer explizit einen Zeichensatz an (z. B. charset=UTF8), da Firebird standardmäßig NONE verwendet, was zu Kodierungsproblemen führen kann.