Signatur
Beschreibung
fbird_blob_close() schließt einen BLOB-Stream, der zuvor mit fbird_blob_open() oder fbird_blob_create() geöffnet bzw. erstellt wurde. Nach dem Schließen ist der BLOB-Handle nicht mehr gültig und darf nicht weiter verwendet werden.
Diese Funktion ist ein wichtiger Bestandteil des BLOB-Workflows in Firebird/InterBase-Datenbanken. Beim Lesen eines BLOBs wird nach dem Auslesen aller Daten mittels fbird_blob_get() dieser Aufruf benötigt. Beim Schreiben werden die zuvor mit fbird_blob_add() hinzugefügten Daten erst durch fbird_blob_close() finalisiert; die Funktion gibt dabei die BLOB-ID zurück, die anschließend in den entsprechenden Datensatz geschrieben werden muss.
Das korrekte Schließen von BLOB-Handles ist essenziell, um Speicherlecks und nicht commitete BLOB-Daten zu vermeiden. Insbesondere beim Schreiben neuer BLOBs darf fbird_blob_close() nicht vergessen werden, da der BLOB sonst nicht persistiert wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $blob_handle Pflicht | resource | Ein gültiger BLOB-Handle, der zuvor durch fbird_blob_open() oder fbird_blob_create() erzeugt wurde. |
Rückgabewert
fbird_blob_create() erstellten (Schreib-)BLOBs wird die BLOB-ID als string zurückgegeben, die anschließend in einen Datensatz gespeichert werden sollte. Beim Schließen eines Lese-BLOBs sowie im Fehlerfall wird true bei Erfolg bzw. false bei einem Fehler zurückgegeben.Beispiele
BLOB aus Firebird-Datenbank lesen
<?php
$dbh = fbird_connect('localhost:mydatabase', 'sysdba', 'masterkey');
$res = fbird_query($dbh, 'SELECT MY_BLOB_FIELD FROM MY_TABLE WHERE ID = 1');
$row = fbird_fetch_object($res);
// BLOB-Stream öffnen
$blob_handle = fbird_blob_open($dbh, $row->MY_BLOB_FIELD);
$blob_data = '';
while ($chunk = fbird_blob_get($blob_handle, 8192)) {
$blob_data .= $chunk;
}
// BLOB-Stream schließen
fbird_blob_close($blob_handle);
echo 'BLOB-Inhalt: ' . $blob_data;
fbird_close($dbh);
?>
Neuen BLOB erstellen und in Datensatz speichern
<?php
$dbh = fbird_connect('localhost:mydatabase', 'sysdba', 'masterkey');
// Neuen BLOB-Stream erstellen
$blob_handle = fbird_blob_create($dbh);
// Daten in den BLOB schreiben
fbird_blob_add($blob_handle, 'Dies sind die BLOB-Daten, die gespeichert werden sollen.');
fbird_blob_add($blob_handle, ' Weitere Daten können hinzugefügt werden.');
// BLOB schließen und BLOB-ID erhalten
$blob_id = fbird_blob_close($blob_handle);
// BLOB-ID in einen Datensatz einfügen
fbird_query($dbh, 'INSERT INTO MY_TABLE (ID, MY_BLOB_FIELD) VALUES (?, ?)', 42, $blob_id);
fbird_commit($dbh);
fbird_close($dbh);
echo 'BLOB erfolgreich gespeichert mit ID: ' . $blob_id;
?>
// Wichtig · Fallstricke
Wichtig beim Schreiben: Die von fbird_blob_close() zurückgegebene BLOB-ID muss zwingend in einen Datensatz gespeichert werden, bevor die Transaktion mit fbird_commit() abgeschlossen wird. Andernfalls gehen die BLOB-Daten verloren.
Deprecation-Hinweis: Die fbird_*-Funktionen sind Aliase der ibase_*-Funktionen. Ab PHP 8.0 wurde die InterBase-Extension aus dem PHP-Core entfernt. Für aktuelle Projekte sollte eine separate PECL-Extension oder eine alternative Datenbankbibliothek verwendet werden.
Ein nicht geschlossener BLOB-Handle kann zu Ressourcenlecks und unerwartetem Verhalten innerhalb einer Transaktion führen. Stellen Sie sicher, dass BLOB-Handles auch im Fehlerfall (z. B. über try/finally) geschlossen werden.