Start · Sprachen · PHP · Referenz · cubrid_lob2_seek

cubrid_lob2_seek

Funktion

Bewegt den internen Cursor eines CUBRID-LOB-Objekts (BLOB/CLOB) um eine bestimmte Anzahl Bytes an eine neue Position.

seit PHP 8.4.1 Kategorie: db

Signatur

cubrid_lob2_seek(resource $lob_identifier, int $offset, int $origin = CUBRID_CURSOR_CURRENT): bool

Beschreibung

cubrid_lob2_seek() ermöglicht es, den Lese-/Schreibcursor eines LOB-Objekts (Large Object) innerhalb einer CUBRID-Datenbankverbindung an eine beliebige Position zu verschieben. Dies ist nützlich, wenn nur ein bestimmter Ausschnitt eines großen Binär- oder Textdatums gelesen oder geschrieben werden soll, ohne das gesamte Objekt laden zu müssen.

Der Parameter origin legt den Bezugspunkt für den Offset fest: CUBRID_CURSOR_FIRST für den Anfang des LOB, CUBRID_CURSOR_CURRENT für die aktuelle Cursor-Position und CUBRID_CURSOR_LAST für das Ende des LOB. Negative Offset-Werte sind in Kombination mit CUBRID_CURSOR_LAST möglich, um vom Ende rückwärts zu navigieren.

In der Praxis wird diese Funktion typischerweise zusammen mit cubrid_lob2_read() oder cubrid_lob2_write() genutzt, um gezielt bestimmte Datenbereiche innerhalb eines LOB-Feldes zu verarbeiten, z. B. beim Streamen großer Dateien oder beim Aktualisieren von Teilbereichen eines gespeicherten Dokuments.

LOB-Objekte werden mit cubrid_lob2_new() erstellt oder über eine Abfrage mit cubrid_lob2_get() aus der Datenbank geladen und müssen am Ende mit cubrid_lob2_close() freigegeben werden.

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein LOB-Ressource-Handle, das zuvor über cubrid_lob2_new() oder cubrid_lob2_get() erzeugt wurde.
$offset Pflicht int Die Anzahl der Bytes, um die der Cursor verschoben werden soll. Kann positiv oder negativ sein, je nach gewähltem origin.
$origin int CUBRID_CURSOR_CURRENT Bezugspunkt für den Offset. Mögliche Werte: CUBRID_CURSOR_FIRST (Anfang), CUBRID_CURSOR_CURRENT (aktuelle Position, Standard), CUBRID_CURSOR_LAST (Ende).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Cursor erfolgreich bewegt wurde, andernfalls false bei einem Fehler (z. B. ungültiges Handle oder Offset außerhalb der LOB-Grenzen).

Beispiele

Teilbereich eines CLOB-Feldes lesen

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

$req = cubrid_execute($conn, "SELECT content FROM documents WHERE id = 1");
cubrid_move_cursor($req, 1, CUBRID_CURSOR_FIRST);
$row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);

$lob = $row[0];

// Cursor auf Byte 100 vom Anfang setzen
if (cubrid_lob2_seek($lob, 100, CUBRID_CURSOR_FIRST)) {
    // 50 Bytes ab Position 100 lesen
    $data = cubrid_lob2_read($lob, 50);
    echo "Gelesener Inhalt: " . $data . PHP_EOL;
} else {
    echo "Cursor-Bewegung fehlgeschlagen." . PHP_EOL;
}

cubrid_lob2_close($lob);
cubrid_close_request($req);
cubrid_disconnect($conn);
?>
Gelesener Inhalt: <50 Bytes des Dokuments ab Position 100>

Die letzten 20 Bytes eines BLOB-Feldes lesen

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

$req = cubrid_execute($conn, "SELECT file_data FROM files WHERE id = 5");
cubrid_move_cursor($req, 1, CUBRID_CURSOR_FIRST);
$row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);

$lob = $row[0];

// Cursor 20 Bytes vor das Ende setzen
if (cubrid_lob2_seek($lob, -20, CUBRID_CURSOR_LAST)) {
    $tail = cubrid_lob2_read($lob, 20);
    echo "Letzte 20 Bytes (hex): " . bin2hex($tail) . PHP_EOL;
} else {
    echo "Fehler beim Positionieren des Cursors." . PHP_EOL;
}

cubrid_lob2_close($lob);
cubrid_close_request($req);
cubrid_disconnect($conn);
?>
Letzte 20 Bytes (hex): 3c2f68746d6c3e...

// Wichtig · Fallstricke

Achtung: Wird ein Offset angegeben, der über die Grenzen des LOB-Objekts hinausgeht (vor Byte 0 oder nach dem letzten Byte), schlägt die Funktion fehl und gibt false zurück. Die aktuelle Cursor-Position bleibt dabei unverändert.

Die Konstanten CUBRID_CURSOR_FIRST, CUBRID_CURSOR_CURRENT und CUBRID_CURSOR_LAST müssen verwendet werden; numerische Werte direkt einzusetzen wird nicht empfohlen, da sich interne Konstantenwerte zwischen Versionen unterscheiden können.

Diese Funktion steht nur zur Verfügung, wenn die CUBRID-Erweiterung in PHP installiert und aktiviert ist. Für sehr große LOB-Objekte ist das gezielte Positionieren via cubrid_lob2_seek() deutlich ressourcenschonender als das Einlesen des gesamten Inhalts.