Signatur
Beschreibung
ibase_blob_create() öffnet ein neues BLOB-Objekt (Binary Large Object) auf dem Datenbankserver und gibt ein Handle zurück, über das Daten in das BLOB geschrieben werden können. Das BLOB existiert zunächst nur temporär; erst nach dem Schließen mit ibase_blob_close() wird es in der Datenbank gespeichert und eine eindeutige BLOB-ID zurückgegeben, die dann in einem INSERT- oder UPDATE-Statement verwendet werden kann.
BLOBs werden in Firebird/InterBase verwendet, um große binäre oder textuelle Daten — zum Beispiel Bilder, PDF-Dateien oder umfangreiche Texte — in der Datenbank zu speichern, ohne sie direkt in eine reguläre Spalte schreiben zu müssen. Der typische Workflow besteht darin, zuerst ibase_blob_create() aufzurufen, dann mit ibase_blob_add() Daten hinzuzufügen und abschließend mit ibase_blob_close() das BLOB zu versiegeln.
Der optionale Parameter link_identifier verweist auf eine aktive Datenbankverbindung. Wird er weggelassen, verwendet PHP die zuletzt geöffnete Verbindung. Da mehrere gleichzeitige Verbindungen möglich sind, empfiehlt sich die explizite Angabe der Verbindungsressource, um unerwartetes Verhalten zu vermeiden.
Hinweis: Die ibase_*-Funktionen wurden mit PHP 8.0 aus dem PHP-Kern entfernt und stehen seither nur noch über die PECL-Erweiterung ibase bzw. den Fork FirebirdSQL/php-firebird zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier | resource | null | Eine aktive Firebird/InterBase-Verbindungsressource, die zuvor mit ibase_connect() oder ibase_pconnect() erzeugt wurde. Wird der Parameter ausgelassen, wird die zuletzt geöffnete Verbindung verwendet. |
Rückgabewert
ibase_blob_add() und ibase_blob_close() übergeben werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Bild als BLOB in Firebird-Datenbank speichern
<?php
$dbh = ibase_connect('localhost:/path/to/database.fdb', 'sysdba', 'masterkey');
// Binärdaten laden (z. B. ein Bild)
$bilddaten = file_get_contents('/var/www/uploads/foto.jpg');
// Neues BLOB erstellen
$blob_handle = ibase_blob_create($dbh);
if ($blob_handle === false) {
die('BLOB konnte nicht erstellt werden.');
}
// Daten in das BLOB schreiben
ibase_blob_add($blob_handle, $bilddaten);
// BLOB versiegeln und ID erhalten
$blob_id = ibase_blob_close($blob_handle);
// BLOB-ID in einer Tabellenspalte speichern
$query = 'INSERT INTO dokumente (titel, inhalt) VALUES (?, ?)';
$stmt = ibase_prepare($dbh, $query);
ibase_execute($stmt, 'Mein Foto', $blob_id);
ibase_commit($dbh);
ibase_close($dbh);
echo 'Bild erfolgreich als BLOB gespeichert.';
?>
Großen Text in mehreren Blöcken in ein BLOB schreiben
<?php
$dbh = ibase_connect('localhost:/path/to/database.fdb', 'sysdba', 'masterkey');
$grosser_text = str_repeat('Lorem ipsum dolor sit amet. ', 5000);
$chunk_groesse = 8192; // 8 KB pro Block
$blob_handle = ibase_blob_create($dbh);
// Text in Blöcken hinzufügen
$offset = 0;
$gesamt = strlen($grosser_text);
while ($offset < $gesamt) {
$block = substr($grosser_text, $offset, $chunk_groesse);
ibase_blob_add($blob_handle, $block);
$offset += $chunk_groesse;
}
$blob_id = ibase_blob_close($blob_handle);
$stmt = ibase_prepare($dbh, 'INSERT INTO artikel (inhalt) VALUES (?)');
ibase_execute($stmt, $blob_id);
ibase_commit($dbh);
ibase_close($dbh);
echo 'Großer Text erfolgreich als BLOB gespeichert.';
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die gesamte ibase_*-Erweiterung wurde ab PHP 8.0 aus dem PHP-Kern entfernt. Für PHP 8+ muss die PECL-Erweiterung oder ein Community-Fork (z. B. php-firebird) verwendet werden.
Ressourcenverwaltung: Ein mit ibase_blob_create() geöffnetes BLOB-Handle muss immer mit ibase_blob_close() abgeschlossen werden. Wird das Handle nicht geschlossen, gehen die gepufferten Daten verloren und die Ressource wird nicht korrekt freigegeben.
Transaktionskontext: BLOB-Operationen finden innerhalb einer Transaktion statt. Vergisst man ibase_commit(), werden die geschriebenen Daten beim Verbindungsende verworfen.