Signatur
Beschreibung
fbird_blob_create() öffnet ein neues BLOB-Objekt (Binary Large Object) innerhalb einer aktiven Firebird- oder InterBase-Datenbankverbindung. Das zurückgegebene BLOB-Handle kann danach mit fbird_blob_add() mit Daten befüllt und abschließend mit fbird_blob_close() geschlossen werden – erst beim Schließen wird die BLOB-ID erzeugt, die in eine Tabellenspalte geschrieben werden kann.
BLOBs werden typischerweise verwendet, wenn große binäre oder textuelle Daten (z. B. Bilder, Dokumente, JSON-Fragmente) in der Datenbank gespeichert werden sollen, die nicht komfortabel in reguläre VARCHAR- oder CHAR-Felder passen. Die dreistufige Vorgehensweise create → add → close erlaubt es, die Daten in mehreren Blöcken zu übergeben, was bei sehr großen Dateien speicherschonend ist.
Wird kein link_identifier übergeben, nutzt PHP automatisch die zuletzt geöffnete Firebird/InterBase-Verbindung. Bei Fehlern – etwa wenn keine offene Verbindung vorhanden ist oder die Transaktion nicht gestartet werden konnte – gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier | resource | null | Eine aktive Firebird/InterBase-Verbindungsressource, die z. B. mit fbird_connect() oder fbird_pconnect() erzeugt wurde. Wird der Parameter weggelassen, verwendet PHP die zuletzt geöffnete Verbindung. |
Rückgabewert
fbird_blob_add() und fbird_blob_close() übergeben werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
BLOB erstellen, befüllen und BLOB-ID in Tabelle speichern
<?php
// Verbindung zur Firebird-Datenbank herstellen
$dbh = fbird_connect('localhost:/var/lib/firebird/data/meine_db.fdb', 'SYSDBA', 'masterkey');
// Zu speichernde Binärdaten (z. B. Inhalt einer Datei)
$dateiinhalt = file_get_contents('/tmp/dokument.pdf');
// Neues BLOB erstellen
$blob = fbird_blob_create($dbh);
if ($blob === false) {
die('BLOB konnte nicht erstellt werden.');
}
// Daten in das BLOB schreiben
fbird_blob_add($blob, $dateiinhalt);
// BLOB schließen → liefert die BLOB-ID zurück
$blob_id = fbird_blob_close($blob);
// BLOB-ID in die Tabelle eintragen
$result = fbird_query($dbh, 'INSERT INTO dokumente (id, inhalt) VALUES (?, ?)', 1, $blob_id);
if ($result) {
echo 'Dokument erfolgreich gespeichert.';
} else {
echo 'Fehler beim Speichern.';
}
fbird_close($dbh);
?>
Großes BLOB in mehreren Blöcken schreiben
<?php
$dbh = fbird_connect('localhost:/var/lib/firebird/data/meine_db.fdb', 'SYSDBA', 'masterkey');
$quelldatei = fopen('/tmp/grosses_video.mp4', 'rb');
$blob = fbird_blob_create($dbh);
// Datei in 8-KB-Blöcken in das BLOB schreiben
while (!feof($quelldatei)) {
$chunk = fread($quelldatei, 8192);
fbird_blob_add($blob, $chunk);
}
fclose($quelldatei);
$blob_id = fbird_blob_close($blob);
fbird_query($dbh, 'INSERT INTO medien (titel, daten) VALUES (?, ?)', 'Video', $blob_id);
echo 'Großes BLOB erfolgreich gespeichert. BLOB-ID: ' . $blob_id;
fbird_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die fbird_*-Funktionen sind ein Alias der ibase_*-Funktionen und werden in modernen PHP-Versionen (ab PHP 8.0 wurde die ibase-Extension aus dem PHP-Core entfernt) nur noch über die separate PECL-ibase-Extension bereitgestellt. Für neue Projekte sollte eine unterstützte Alternative (z. B. PDO mit dem Firebird-Treiber) in Betracht gezogen werden.
Transaktionskontext: Das BLOB wird im Kontext der aktuellen Transaktion erstellt. Wird die Transaktion zurückgerollt (fbird_rollback()), geht auch das BLOB verloren. Die fbird_blob_close()-Funktion muss vor dem Commit aufgerufen werden, damit die BLOB-ID in der Zeile gespeichert werden kann.
Ressourcen: Nicht geschlossene BLOB-Handles können zu Ressourcenlecks führen. Stellen Sie sicher, dass fbird_blob_close() auch im Fehlerfall aufgerufen wird, z. B. über try/finally.