Start · Sprachen · PHP · Referenz · cubrid_lob_close

cubrid_lob_close

Funktion

Schließt eine oder mehrere geöffnete BLOB/CLOB-Ressourcen, die zuvor mit <code>cubrid_lob_get</code> abgerufen wurden.

seit PHP 5.0.0 Kategorie: db

Signatur

cubrid_lob_close(array $lob_identifier): bool

Beschreibung

cubrid_lob_close gibt die Ressourcen frei, die durch einen Aufruf von cubrid_lob_get erzeugt wurden. Die Funktion erwartet ein Array von LOB-Bezeichnern, wie es von cubrid_lob_get zurückgegeben wird, und schließt alle darin enthaltenen BLOB- oder CLOB-Objekte.

BLOB (Binary Large Object) und CLOB (Character Large Object) sind spezielle Datentypen in CUBRID, die für die Speicherung großer Binär- oder Textdaten vorgesehen sind. Nach dem Auslesen oder Verarbeiten dieser Daten sollten die zugehörigen LOB-Ressourcen mit dieser Funktion explizit geschlossen werden, um Speicherlecks und nicht freigegebene Datenbankressourcen zu vermeiden.

Der typische Arbeitsablauf sieht vor, zuerst mit cubrid_lob_get die LOB-Objekte abzurufen, anschließend deren Inhalt z. B. per cubrid_lob_export oder cubrid_lob_send zu verarbeiten und danach die Ressourcen mit cubrid_lob_close zu schließen.

Es empfiehlt sich, cubrid_lob_close immer in einem finally-Block oder unmittelbar nach der Verarbeitung aufzurufen, um sicherzustellen, dass die Ressourcen auch im Fehlerfall korrekt freigegeben werden.

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht array Ein Array von LOB-Bezeichnern, wie es von cubrid_lob_get zurückgegeben wird. Enthält die Referenzen auf die zu schließenden BLOB- oder CLOB-Ressourcen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn alle LOB-Ressourcen erfolgreich geschlossen wurden. Gibt false zurück, wenn ein Fehler aufgetreten ist, z. B. wenn ungültige LOB-Bezeichner übergeben wurden.

Beispiele

BLOB-Daten abrufen, exportieren und Ressourcen schließen

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');

$req = cubrid_execute($conn, "SELECT image FROM product WHERE id = 1");

if ($req) {
    // LOB-Objekte aus der Ergebnismenge abrufen
    $lobs = cubrid_lob_get($conn, $req);

    if ($lobs !== false) {
        // Inhalt des ersten LOB in eine Datei exportieren
        cubrid_lob_export($conn, $lobs[0], '/tmp/product_image.jpg');
        echo "Bild erfolgreich exportiert." . PHP_EOL;

        // LOB-Ressourcen explizit schließen
        if (cubrid_lob_close($lobs)) {
            echo "LOB-Ressourcen erfolgreich geschlossen." . PHP_EOL;
        } else {
            echo "Fehler beim Schließen der LOB-Ressourcen." . PHP_EOL;
        }
    }

    cubrid_close_request($req);
}

cubrid_disconnect($conn);
?>
Bild erfolgreich exportiert. LOB-Ressourcen erfolgreich geschlossen.

CLOB-Inhalt lesen und Ressourcen zuverlässig schließen

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');

$req = cubrid_execute($conn, "SELECT description FROM article WHERE id = 42");
$lobs = false;

try {
    if ($req) {
        $lobs = cubrid_lob_get($conn, $req);

        if ($lobs !== false) {
            // Größe des CLOB-Objekts ermitteln
            $size = cubrid_lob_size($lobs[0]);
            echo "CLOB-Größe: " . $size . " Bytes" . PHP_EOL;

            // Inhalt des CLOB auslesen
            $text = cubrid_lob_read($lobs[0], 0, $size);
            echo "Inhalt: " . $text . PHP_EOL;
        }
    }
} finally {
    // LOBs im finally-Block sicher schließen
    if ($lobs !== false) {
        cubrid_lob_close($lobs);
    }
    if ($req) {
        cubrid_close_request($req);
    }
    cubrid_disconnect($conn);
}
?>
CLOB-Größe: 1024 Bytes Inhalt: ...

// Wichtig · Fallstricke

Ressourcenverwaltung: Das Vergessen von cubrid_lob_close kann zu Speicherlecks und zur Erschöpfung von Datenbankverbindungen führen, insbesondere bei der Verarbeitung vieler LOB-Objekte in einer Schleife. Verwende daher immer try/finally-Blöcke, um das Schließen sicherzustellen.

Veraltete API: Die cubrid_lob_*-Funktionen gelten als ältere API. Ab neueren CUBRID-Treiberversionen steht die cubrid_lob2_*-Familie zur Verfügung (z. B. cubrid_lob2_close), die objektorientierter und flexibler ist. Für neue Projekte wird die Verwendung der lob2-Funktionen empfohlen.