Start · Sprachen · PHP · Referenz · cubrid_lob2_seek64

cubrid_lob2_seek64

Funktion

Bewegt den Cursor eines LOB-Objekts (BLOB/CLOB) in einer CUBRID-Datenbank unter Verwendung eines 64-Bit-Offsets.

seit PHP 8.4.0 Kategorie: db

Signatur

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

Beschreibung

cubrid_lob2_seek64() positioniert den internen Cursor eines LOB-Objekts (Large Object, also BLOB oder CLOB) auf eine bestimmte Position. Im Unterschied zur Funktion cubrid_lob2_seek() wird der Offset als String übergeben, um 64-Bit-große Dateipositionen auch auf 32-Bit-Systemen korrekt abbilden zu können, da PHP auf solchen Plattformen keine nativen 64-Bit-Integer unterstützt.

Der Ursprung der Bewegung wird über den Parameter origin gesteuert. Mögliche Werte sind CUBRID_CURSOR_FIRST (Anfang des LOB), CUBRID_CURSOR_CURRENT (aktuelle Position) und CUBRID_CURSOR_LAST (Ende des LOB). Dies ermöglicht wahlfreien Zugriff auf beliebige Teile sehr großer Binär- oder Textdaten.

Die Funktion ist besonders nützlich, wenn LOB-Objekte größer als 2 GB sind und Teilbereiche gezielt gelesen oder geschrieben werden sollen, ohne den gesamten Inhalt in den Speicher laden zu müssen.

Nach dem Positionieren des Cursors kann mit cubrid_lob2_read() ab der neuen Position gelesen werden. Das LOB-Objekt muss zuvor über cubrid_lob2_new() oder eine entsprechende Abfrage erzeugt worden sein.

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein LOB-Identifikator, der durch cubrid_lob2_new() oder aus einem Abfrageergebnis stammt.
$offset Pflicht string Die Anzahl der Bytes (bei BLOB) bzw. Zeichen (bei CLOB), um die der Cursor verschoben werden soll. Als String übergeben, um 64-Bit-Werte auch auf 32-Bit-Systemen korrekt darzustellen.
$origin int CUBRID_CURSOR_CURRENT Gibt den Bezugspunkt für die Cursorbewegung an. Erlaubte Werte: CUBRID_CURSOR_FIRST (Anfang), CUBRID_CURSOR_CURRENT (aktuelle Position), CUBRID_CURSOR_LAST (Ende).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Im Fehlerfall (z. B. ungültiger Offset oder ungültiges LOB-Objekt) wird false zurückgegeben.

Beispiele

Cursor eines großen BLOB-Objekts auf eine bestimmte Position setzen

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

// LOB-Objekt aus einer Abfrage holen
$req = cubrid_execute($conn, "SELECT blobcol FROM bigtable WHERE id = 1");
$row = cubrid_fetch($req, CUBRID_NUM);
$lob = $row[0];

// Cursor auf Byte 3.000.000.000 vom Anfang setzen (64-Bit-Offset als String)
$result = cubrid_lob2_seek64($lob, '3000000000', CUBRID_CURSOR_FIRST);

if ($result) {
    // Ab dieser Position 1024 Bytes lesen
    $data = cubrid_lob2_read($lob, 1024);
    echo "Gelesene Bytes: " . strlen($data) . PHP_EOL;
} else {
    echo "Cursor konnte nicht positioniert werden." . PHP_EOL;
}

cubrid_lob2_close($lob);
cubrid_close($conn);
?>
Gelesene Bytes: 1024

Cursor relativ zur aktuellen Position verschieben

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

$req = cubrid_execute($conn, "SELECT blobcol FROM bigtable WHERE id = 2");
$row = cubrid_fetch($req, CUBRID_NUM);
$lob = $row[0];

// Zunächst zum Anfang springen
cubrid_lob2_seek64($lob, '0', CUBRID_CURSOR_FIRST);

// Dann 5.000.000.000 Bytes vorwärts vom aktuellen Cursor
$moved = cubrid_lob2_seek64($lob, '5000000000', CUBRID_CURSOR_CURRENT);

if ($moved) {
    echo "Cursor erfolgreich verschoben." . PHP_EOL;
    $chunk = cubrid_lob2_read($lob, 512);
    echo "Chunk-Länge: " . strlen($chunk) . PHP_EOL;
} else {
    echo "Fehler beim Verschieben des Cursors." . PHP_EOL;
}

cubrid_lob2_close($lob);
cubrid_close($conn);
?>
Cursor erfolgreich verschoben. Chunk-Länge: 512

// Wichtig · Fallstricke

Hinweis zu 32-Bit-Systemen: Der Offset wird bewusst als string statt als int übergeben, da PHP auf 32-Bit-Plattformen keine Integer größer als ca. 2,1 Milliarden darstellen kann. Als String können beliebig große Zahlen übergeben werden, die intern als 64-Bit-Wert verarbeitet werden.

Auf 64-Bit-Systemen kann alternativ cubrid_lob2_seek() mit einem nativen PHP-Integer verwendet werden, sofern der Offset im darstellbaren Bereich liegt.

Stellen Sie sicher, dass das LOB-Objekt geöffnet und gültig ist, bevor Sie diese Funktion aufrufen. Ein ungültiger Ressource-Handle führt zu einem Fehler.