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