Signatur
Beschreibung
fbird_blob_import() ist ein Alias für ibase_blob_import() und dient dazu, den Inhalt einer geöffneten Datei direkt als Binary Large Object (BLOB) in eine Firebird- oder InterBase-Datenbank zu übertragen. Die Funktion liest alle Daten aus dem übergebenen Datei-Handle und erzeugt daraus intern einen BLOB, der anschließend über den zurückgegebenen BLOB-Bezeichner in einer INSERT- oder UPDATE-Anweisung verwendet werden kann.
BLOBs werden typischerweise für die Speicherung großer binärer oder textueller Daten verwendet, etwa Bilder, PDF-Dokumente oder sonstige Dateien, die direkt in der Datenbank abgelegt werden sollen. Im Gegensatz zur manuellen BLOB-Erstellung mit fbird_blob_create() und fbird_blob_add() vereinfacht fbird_blob_import() den Prozess erheblich, indem es den Inhalt des Datei-Handles in einem einzigen Schritt importiert.
Die Funktion gibt bei Erfolg einen BLOB-Bezeichner (als String) zurück, der dann als Parameter in einer vorbereiteten SQL-Anweisung übergeben werden kann. Das Datei-Handle muss zuvor mit fopen() oder einer vergleichbaren Funktion geöffnet worden sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier Pflicht | resource | Eine aktive Firebird/InterBase-Datenbankverbindung, die mit fbird_connect() oder fbird_pconnect() geöffnet wurde. |
|
| $file_handle Pflicht | resource | Ein geöffnetes Datei-Handle, z. B. zurückgegeben von fopen(). Die Funktion liest alle Daten aus diesem Handle und schreibt sie als BLOB in die Datenbank. |
Rückgabewert
false zurückgegeben.Beispiele
Bild als BLOB in Firebird-Datenbank speichern
<?php
// Datenbankverbindung aufbauen
$dbh = fbird_connect('localhost:/pfad/zur/datenbank.fdb', 'sysdba', 'masterkey');
if (!$dbh) {
die('Verbindung fehlgeschlagen: ' . fbird_errmsg());
}
// Datei öffnen, die als BLOB gespeichert werden soll
$datei = fopen('/pfad/zum/bild.jpg', 'rb');
if (!$datei) {
die('Datei konnte nicht geöffnet werden.');
}
// BLOB aus Datei erzeugen
$blob_id = fbird_blob_import($dbh, $datei);
fclose($datei);
if ($blob_id === false) {
die('BLOB-Import fehlgeschlagen: ' . fbird_errmsg());
}
// BLOB-Bezeichner in INSERT-Anweisung verwenden
$sql = 'INSERT INTO dokumente (name, inhalt) VALUES (?, ?)';
$stmt = fbird_prepare($dbh, $sql);
fbird_execute($stmt, 'bild.jpg', $blob_id);
echo 'BLOB erfolgreich gespeichert.';
fbird_close($dbh);
?>
PDF-Datei als BLOB mit Transaktion speichern
<?php
$dbh = fbird_connect('localhost:/pfad/zur/datenbank.fdb', 'sysdba', 'masterkey');
// Transaktion starten
$trans = fbird_trans(IBASE_WRITE | IBASE_COMMITTED, $dbh);
$datei = fopen('/pfad/zum/dokument.pdf', 'rb');
if (!$datei) {
die('Datei nicht gefunden.');
}
$blob_id = fbird_blob_import($dbh, $datei);
fclose($datei);
if ($blob_id !== false) {
$sql = 'INSERT INTO berichte (titel, pdf_inhalt) VALUES (?, ?)';
$stmt = fbird_prepare($trans, $sql);
fbird_execute($stmt, 'Jahresbericht 2024', $blob_id);
fbird_commit($trans);
echo 'PDF erfolgreich in die Datenbank importiert.';
} else {
fbird_rollback($trans);
echo 'Fehler beim BLOB-Import: ' . fbird_errmsg();
}
fbird_close($dbh);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die fbird_*-Funktionen (Aliase der ibase_*-Funktionen) sind seit PHP 8.0 nicht mehr im Kern von PHP enthalten. Für Firebird-Datenbankzugriffe sollte die Firebird PDO-Erweiterung oder die externe ibase-PECL-Erweiterung verwendet werden.
Das übergebene Datei-Handle sollte im Binärmodus ('rb') geöffnet sein, um auf Windows-Systemen unerwünschte Zeilenumbruch-Konvertierungen zu vermeiden, die bei Binärdaten zu Datenverlust führen können.
Nach dem Aufruf von fbird_blob_import() bleibt der BLOB im Speicher der Transaktion vorgehalten, bis diese durch fbird_commit() bestätigt oder durch fbird_rollback() verworfen wird.