Signatur
Beschreibung
ibase_blob_add() schreibt einen Datenblock (Chunk) in ein zuvor mit ibase_blob_create() erzeugtes BLOB-Handle. Die Funktion ermöglicht es, große Binär- oder Textdaten in mehreren Schritten in ein BLOB zu schreiben, ohne alles auf einmal im Speicher vorhalten zu müssen.
Der typische Arbeitsablauf beim Erstellen eines BLOBs in Firebird/InterBase ist: ibase_blob_create() öffnet ein neues BLOB, danach werden mit einem oder mehreren Aufrufen von ibase_blob_add() Daten hinzugefügt, und schließlich wird das BLOB mit ibase_blob_close() abgeschlossen und die BLOB-ID zurückgegeben, die in einem INSERT- oder UPDATE-Statement verwendet werden kann.
Diese Funktion eignet sich besonders für das Einlesen großer Dateien (z. B. Bilder oder Dokumente), die in Chunks verarbeitet werden sollen, um den Speicherbedarf zu begrenzen. Es ist zu beachten, dass die Reihenfolge der ibase_blob_add()-Aufrufe die Reihenfolge der Daten im BLOB bestimmt.
Hinweis: Die ibase-Erweiterung ist ab PHP 7.4 als PECL-Erweiterung ausgegliedert und ab PHP 8.0 aus dem offiziellen PHP-Kern entfernt worden. Für neue Projekte sollte stattdessen die ibase- bzw. fbird-PECL-Erweiterung oder eine alternative Datenbankabstraktion verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $blob_handle Pflicht | resource | Ein BLOB-Handle-Ressource, das zuvor mit ibase_blob_create() geöffnet wurde. |
|
| $data Pflicht | string | Der Daten-String (Chunk), der dem BLOB hinzugefügt werden soll. Kann beliebige Binär- oder Textdaten enthalten. |
Rückgabewert
Beispiele
Bilddatei als BLOB in Firebird-Datenbank speichern
<?php
$dbh = ibase_connect('localhost:database.fdb', 'SYSDBA', 'masterkey');
$filePath = '/var/www/uploads/bild.jpg';
$fileHandle = fopen($filePath, 'rb');
if (!$fileHandle) {
die('Datei konnte nicht geöffnet werden.');
}
// Neues BLOB erstellen
$blobHandle = ibase_blob_create($dbh);
// Datei in 8KB-Chunks in das BLOB schreiben
while (!feof($fileHandle)) {
$chunk = fread($fileHandle, 8192);
ibase_blob_add($blobHandle, $chunk);
}
fclose($fileHandle);
// BLOB schließen und BLOB-ID erhalten
$blobId = ibase_blob_close($blobHandle);
// BLOB-ID in Tabelle speichern
ibase_query($dbh, "INSERT INTO bilder (name, daten) VALUES ('bild.jpg', ?)", $blobId);
ibase_commit($dbh);
echo 'Bild erfolgreich als BLOB gespeichert.';
ibase_close($dbh);
?>
Kleinen Text-BLOB direkt schreiben
<?php
$dbh = ibase_connect('localhost:database.fdb', 'SYSDBA', 'masterkey');
$text = 'Dies ist ein langer Beschreibungstext, der als BLOB gespeichert wird.';
$blobHandle = ibase_blob_create($dbh);
ibase_blob_add($blobHandle, $text);
$blobId = ibase_blob_close($blobHandle);
ibase_query($dbh, "INSERT INTO dokumente (titel, inhalt) VALUES ('Testdokument', ?)", $blobId);
ibase_commit($dbh);
echo 'Textdokument als BLOB eingefügt.';
ibase_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation/Entfernung: Die ibase_*-Funktionen wurden in PHP 7.4 als veraltet markiert und in PHP 8.0 aus dem PHP-Kern entfernt. Sie stehen nur noch über die PECL-Erweiterung ibase (auch bekannt als interbase) oder die fbird_blob_add()-Funktion der firebird-PECL-Erweiterung zur Verfügung.
Es ist wichtig, das BLOB-Handle nach allen ibase_blob_add()-Aufrufen stets mit ibase_blob_close() zu schließen, bevor die zurückgegebene BLOB-ID in einem SQL-Statement verwendet werden kann. Ein nicht geschlossenes BLOB führt zu einem ungültigen Verweis in der Datenbank.
Beim Schreiben binärer Daten (z. B. Bilder, PDF-Dateien) sollte darauf geachtet werden, dass PHP keine Zeichenkodierungskonvertierungen an den Daten vornimmt. Dateien sollten im Binärmodus ('rb') geöffnet werden.