Start · Sprachen · PHP · Referenz · cubrid_lob2_read

cubrid_lob2_read

Funktion

Liest eine angegebene Anzahl von Bytes aus einem CUBRID LOB2-Objekt (BLOB oder CLOB) und gibt den gelesenen Inhalt zurück.

seit PHP 5.3.1 Kategorie: db

Signatur

cubrid_lob2_read(resource $lob_identifier, int $len): string|false

Beschreibung

cubrid_lob2_read() liest aus einem LOB2-Objekt (Large Object), das zuvor mit cubrid_lob2_new() erstellt oder aus einer CUBRID-Datenbankabfrage gewonnen wurde. Die Funktion liest dabei genau $len Bytes ab der aktuellen internen Leseposition und rückt diesen Zeiger entsprechend vor.

LOB-Objekte werden in CUBRID für die Speicherung großer Mengen unstrukturierter Daten wie Bilder, Dokumente oder lange Texte verwendet. BLOB steht für Binary Large Object (Binärdaten), CLOB für Character Large Object (Zeichendaten). Beide Typen können mit dieser Funktion blockweise ausgelesen werden.

Typischerweise wird cubrid_lob2_read() in einer Schleife eingesetzt, um große Datenmengen in überschaubaren Blöcken zu lesen, anstatt den gesamten LOB-Inhalt auf einmal in den Speicher zu laden. Damit lassen sich auch sehr große Dateien speichereffizient verarbeiten.

Schlägt das Lesen fehl oder ist das Ende des LOB-Objekts erreicht, gibt die Funktion false zurück. Bei Erfolg wird der gelesene String zurückgegeben – auch wenn er kürzer als $len Bytes ist (z. B. am Ende des Objekts).

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein gültiges LOB2-Ressource-Handle, das durch cubrid_lob2_new() oder eine entsprechende Abfragefunktion zurückgegeben wurde.
$len Pflicht int Die Anzahl der Bytes, die aus dem LOB-Objekt gelesen werden sollen. Muss eine positive ganze Zahl sein.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den gelesenen Inhalt als string zurück. Der zurückgegebene String kann kürzer als $len sein, wenn das Ende des LOB-Objekts erreicht wurde. Gibt false zurück, wenn ein Fehler auftritt oder keine Daten mehr zu lesen sind.

Beispiele

BLOB-Daten blockweise aus CUBRID lesen

<?php
$conn = cubrid_connect('localhost', 33000, 'testdb', 'dba', '');
$req  = cubrid_execute($conn, "SELECT bild_daten FROM produkte WHERE id = 1");

if ($req) {
    $row = cubrid_fetch_row($req, CUBRID_LOB);
    $lob = $row[0]; // LOB2-Ressource

    $blockgroesse = 4096; // 4 KB pro Block
    $inhalt = '';

    while (($chunk = cubrid_lob2_read($lob, $blockgroesse)) !== false) {
        $inhalt .= $chunk;
    }

    echo "Gelesene Bytes: " . strlen($inhalt) . PHP_EOL;

    cubrid_lob2_close($lob);
    cubrid_close_request($req);
}

cubrid_disconnect($conn);
?>
Gelesene Bytes: 102400

CLOB-Textinhalt blockweise lesen und ausgeben

<?php
$conn = cubrid_connect('localhost', 33000, 'testdb', 'dba', '');
$req  = cubrid_execute($conn, "SELECT beschreibung FROM artikel WHERE id = 5");

if ($req) {
    $row = cubrid_fetch_row($req, CUBRID_LOB);
    $clob = $row[0]; // CLOB-Ressource

    $blockgroesse = 1024;
    echo "<p>Artikelbeschreibung:</p><pre>";

    while (($chunk = cubrid_lob2_read($clob, $blockgroesse)) !== false) {
        echo htmlspecialchars($chunk);
    }

    echo "</pre>";

    cubrid_lob2_close($clob);
    cubrid_close_request($req);
}

cubrid_disconnect($conn);
?>
<p>Artikelbeschreibung:</p><pre>Dies ist ein langer Beschreibungstext ...</pre>

// Wichtig · Fallstricke

Leseposition: Die interne Leseposition wird nach jedem Aufruf automatisch um die Anzahl der gelesenen Bytes vorgerückt. Mit cubrid_lob2_seek() bzw. cubrid_lob2_seek64() kann die Position manuell gesetzt werden.

Ressourcenverwaltung: LOB-Ressourcen sollten nach Gebrauch immer mit cubrid_lob2_close() geschlossen werden, um Speicherlecks zu vermeiden.

Rückgabewert am Ende: Es wird empfohlen, den Rückgabewert mit === false zu prüfen, da ein leerer String '' ein gültiges Ergebnis darstellen kann (z. B. bei einem leeren LOB-Objekt), das von false unterschieden werden muss.