Signatur
Beschreibung
fbird_blob_add() schreibt einen Daten-Chunk in einen zuvor mit fbird_blob_create() erzeugten BLOB (Binary Large Object) in einer Firebird- oder InterBase-Datenbank. Die Funktion kann mehrfach aufgerufen werden, um Daten schrittweise (chunk-weise) an den BLOB anzuhängen, bis er mit fbird_blob_close() finalisiert wird.
BLOBs werden in Firebird/InterBase eingesetzt, um große binäre oder textuelle Datenmengen – z. B. Bilddateien, Dokumente oder lange Texte – in der Datenbank zu speichern. Da die Daten nicht in einem einzigen Schritt übertragen werden müssen, eignet sich dieser Ansatz besonders für sehr große Dateien, die in mehreren Teilen (Chunks) verarbeitet werden sollen.
Der typische Workflow ist: BLOB erstellen mit fbird_blob_create(), beliebig viele Chunks mit fbird_blob_add() hinzufügen, BLOB mit fbird_blob_close() schließen und die zurückgegebene BLOB-ID beim Einfügen oder Aktualisieren eines Datensatzes verwenden.
Hinweis: fbird_blob_add() ist ein Alias für ibase_blob_add(). Die ibase/fbird-Erweiterung ist ab PHP 7.4 nicht mehr im Kern enthalten und wurde in das PECL-Paket ibase ausgelagert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $blob_handle Pflicht | resource | Ein BLOB-Handle, das zuvor mit fbird_blob_create() erstellt wurde und noch nicht geschlossen ist. |
|
| $data Pflicht | string | Die Daten (binär oder Text), die dem BLOB hinzugefügt werden sollen. Können beliebig groß sein; mehrfache Aufrufe fügen die Daten sequenziell an. |
Rückgabewert
Beispiele
Bilddatei als BLOB in Firebird-Datenbank speichern
<?php
// Datenbankverbindung herstellen
$dbh = fbird_connect('localhost:/var/db/mydb.fdb', 'sysdba', 'masterkey');
// Zu speichernde Datei lesen
$filePath = '/var/www/uploads/photo.jpg';
$fileData = file_get_contents($filePath);
// BLOB erstellen
$blobHandle = fbird_blob_create($dbh);
// Daten in Chunks von 4 KB dem BLOB hinzufügen
$chunkSize = 4096;
$offset = 0;
while ($offset < strlen($fileData)) {
$chunk = substr($fileData, $offset, $chunkSize);
fbird_blob_add($blobHandle, $chunk);
$offset += $chunkSize;
}
// BLOB schließen und BLOB-ID erhalten
$blobId = fbird_blob_close($blobHandle);
// BLOB-ID in einem Datensatz speichern
$stmt = fbird_prepare($dbh, 'INSERT INTO photos (id, image_data) VALUES (?, ?)');
fbird_execute($stmt, 1, $blobId);
fbird_commit($dbh);
echo "Bild erfolgreich gespeichert.";
?>
Kleinen Text-BLOB in einem Schritt hinzufügen
<?php
$dbh = fbird_connect('localhost:/var/db/mydb.fdb', 'sysdba', 'masterkey');
$longText = str_repeat("Dies ist ein langer Beschreibungstext. ", 100);
$blobHandle = fbird_blob_create($dbh);
fbird_blob_add($blobHandle, $longText);
$blobId = fbird_blob_close($blobHandle);
$stmt = fbird_prepare($dbh, 'INSERT INTO articles (id, content) VALUES (?, ?)');
fbird_execute($stmt, 42, $blobId);
fbird_commit($dbh);
echo "Artikel-BLOB wurde angelegt, ID: " . $blobId;
?>
// Wichtig · Fallstricke
Deprecation / Verfügbarkeit: Die fbird_*- bzw. ibase_*-Erweiterung wurde in PHP 7.4 aus dem offiziellen PHP-Kern entfernt und steht seither nur noch als PECL-Paket (pecl/ibase) oder über das separate php-firebird-Paket bereit. In PHP 8.x muss die Erweiterung explizit installiert werden.
Ressourcen-Management: Wird der BLOB-Handle nicht mit fbird_blob_close() geschlossen oder mit fbird_blob_cancel() abgebrochen, können offene Ressourcen in der Datenbank verbleiben. Stets sicherstellen, dass der BLOB auch im Fehlerfall geschlossen wird (z. B. mittels try/finally).
Binärsicherheit: fbird_blob_add() ist binärsicher, d. h. auch Null-Bytes in den Daten werden korrekt verarbeitet. Für binäre Dateien (Bilder, PDFs etc.) kann der String daher direkt übergeben werden.