Start · Sprachen · PHP · Referenz · fbird_blob_close

fbird_blob_close

Funktion

Schließt einen zuvor geöffneten Firebird/InterBase-BLOB-Stream und gibt die zugehörigen Ressourcen frei.

Kategorie: db

Signatur

fbird_blob_close(resource $blob_handle): bool

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

Typ
string|bool
Beschreibung
Beim Schließen eines mit 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);
?>
BLOB-Inhalt: (Inhalt des BLOB-Feldes)

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;
?>
BLOB erfolgreich gespeichert mit ID: (BLOB-Identifikator)

// 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.