Start · Sprachen · PHP · Referenz · fbird_blob_import

fbird_blob_import

Funktion

Liest den Inhalt eines geöffneten Datei-Handles und speichert ihn als BLOB in einer Firebird/InterBase-Datenbank.

seit PHP 5.0.0 Kategorie: db

Signatur

fbird_blob_import(resource $link_identifier, resource $file_handle): string|false

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

Typ
string|false
Beschreibung
Bei Erfolg wird ein BLOB-Bezeichner als String zurückgegeben, der in einer SQL-Anweisung als Bindungsparameter verwendet werden kann. Im Fehlerfall wird 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);
?>
BLOB erfolgreich gespeichert.

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);
?>
PDF erfolgreich in die Datenbank importiert.

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