Start · Sprachen · PHP · Referenz · cubrid_lob2_tell

cubrid_lob2_tell

Funktion

Gibt die aktuelle Cursorposition (in Bytes) innerhalb eines CUBRID LOB-Objekts zurück.

seit PHP 5.3.1 Kategorie: db

Signatur

cubrid_lob2_tell(resource $lob_object): int|false

Beschreibung

cubrid_lob2_tell liefert die aktuelle Lese-/Schreibposition (Offset in Bytes) des internen Cursors eines CUBRID LOB-Objekts (BLOB oder CLOB). Die Funktion ist das CUBRID-Äquivalent zu ftell() für Datei-Handles und wird typischerweise in Kombination mit cubrid_lob2_seek und cubrid_lob2_read eingesetzt, um die genaue Position innerhalb großer Binär- oder Textdaten zu ermitteln.

LOB-Objekte werden in CUBRID für die Speicherung sehr großer Datenmengen (z. B. Bilder, Dokumente, XML-Daten) verwendet, die über normale Spalten hinausgehen. Nachdem mit cubrid_lob2_seek oder cubrid_lob2_read Operationen durchgeführt wurden, verschiebt sich der Cursor automatisch. cubrid_lob2_tell ermöglicht es, diesen aktuellen Zustand abzufragen, ohne den Cursor selbst zu verändern.

Die Funktion gibt einen ganzzahligen Wert zurück, der den Byte-Offset vom Anfang des LOB-Objekts darstellt. Im Fehlerfall (z. B. ungültiges Handle) wird false zurückgegeben. Da CUBRID LOB-Objekte sehr groß sein können, sollte bei 32-Bit-PHP-Installationen beachtet werden, dass der zurückgegebene Wert möglicherweise durch Integer-Grenzen beschränkt ist.

Parameter

Name Typ Default Beschreibung
$lob_object Pflicht resource Ein gültiges CUBRID LOB-Objekt, das zuvor mit cubrid_lob2_new oder durch Auslesen einer LOB-Spalte erstellt wurde.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die aktuelle Cursorposition als Integer (Byte-Offset ab Dateianfang) zurück. Im Fehlerfall wird false zurückgegeben.

Beispiele

Aktuelle Cursorposition nach dem Lesen ermitteln

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

// LOB-Objekt aus einer Datenbankabfrage lesen
$req = cubrid_execute($conn, "SELECT image_data FROM my_table WHERE id = 1");
if ($req) {
    $tuple = cubrid_fetch($req, CUBRID_LOB);
    $lob = $tuple[0]; // LOB-Ressource

    // 100 Bytes lesen – Cursor bewegt sich automatisch
    $data = cubrid_lob2_read($lob, 100);

    // Aktuelle Cursorposition abfragen
    $pos = cubrid_lob2_tell($lob);
    echo "Cursorposition nach dem Lesen: " . $pos . " Bytes" . PHP_EOL;

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

cubrid_disconnect($conn);
?>
Cursorposition nach dem Lesen: 100 Bytes

Cursorposition nach gezieltem Seek prüfen

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

$req = cubrid_execute($conn, "SELECT document_text FROM documents WHERE id = 42");
if ($req) {
    $tuple = cubrid_fetch($req, CUBRID_LOB);
    $lob = $tuple[0];

    // Cursor auf Byte 512 setzen
    cubrid_lob2_seek($lob, 512, CUBRID_CURSOR_FIRST);

    // Position kontrollieren
    $pos = cubrid_lob2_tell($lob);
    if ($pos !== false) {
        echo "Cursor steht bei Byte: " . $pos . PHP_EOL;
    } else {
        echo "Fehler beim Ermitteln der Cursorposition." . PHP_EOL;
    }

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

cubrid_disconnect($conn);
?>
Cursor steht bei Byte: 512

// Wichtig · Fallstricke

32-Bit-Systeme: Auf 32-Bit-PHP-Installationen kann der maximale Integer-Wert (~2 GB) als Obergrenze der zurückgegebenen Position fungieren. Bei sehr großen LOB-Objekten sollte eine 64-Bit-PHP-Umgebung verwendet werden.

Gültigkeit der Ressource: Nach dem Schließen eines LOB-Objekts mit cubrid_lob2_close ist die Ressource ungültig. Ein anschließender Aufruf von cubrid_lob2_tell liefert dann false.

Die Funktion gehört zur CUBRID-Erweiterung und steht nur zur Verfügung, wenn PHP mit CUBRID-Unterstützung kompiliert bzw. die Erweiterung geladen wurde.