Signatur
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
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);
?>
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);
?>
// 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.