Signatur
Beschreibung
cubrid_lob2_tell64() ermittelt die aktuelle Lese-/Schreibposition (Cursor) innerhalb eines geöffneten LOB-Objekts (Large Object) in CUBRID. Der Rückgabewert entspricht dem 64-Bit-Offset in Bytes ab dem Anfang des LOB-Inhalts.
Da PHP auf 32-Bit-Systemen keine nativen 64-Bit-Ganzzahlen unterstützt, wird die Position als String zurückgegeben, um Überlaufprobleme zu vermeiden. Auf 64-Bit-Systemen kann der Wert dennoch weiterverarbeitet werden, ohne Präzisionsverlust zu riskieren.
Diese Funktion ist besonders nützlich, wenn man mit sehr großen BLOB- oder CLOB-Daten arbeitet und die aktuelle Position nach mehreren cubrid_lob2_read()- oder cubrid_lob2_seek64()-Aufrufen nachvollziehen möchte. Sie ergänzt cubrid_lob2_tell(), das nur für kleinere LOB-Objekte bis zur Größe eines 32-Bit-Integers geeignet ist.
Typische Einsatzszenarien sind das schrittweise Einlesen großer Binärdateien aus der Datenbank sowie die Implementierung von Fortschrittsanzeigen beim Auslesen von LOB-Daten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $lob_identifier Pflicht | resource | Ein gültiges LOB-Ressource-Handle, das zuvor mit cubrid_lob2_new() oder durch das Abrufen einer LOB-Spalte aus einer CUBRID-Abfrage erzeugt wurde. |
Rückgabewert
false zurückgegeben.Beispiele
Aktuelle Cursorposition nach partiellem Lesen eines LOBs ermitteln
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$req = cubrid_execute($conn, "SELECT content FROM documents WHERE id = 1");
cubrid_fetch($req);
$lob = cubrid_lob2_new($conn, 'CLOB');
// 1024 Bytes aus dem LOB lesen
cubrid_lob2_read($lob, 1024);
// Aktuelle Cursorposition abfragen
$position = cubrid_lob2_tell64($lob);
if ($position !== false) {
echo "Aktuelle Cursorposition: " . $position . " Bytes";
} else {
echo "Fehler beim Ermitteln der Cursorposition.";
}
cubrid_lob2_close($lob);
cubrid_disconnect($conn);
?>
Vergleich zwischen cubrid_lob2_tell und cubrid_lob2_tell64
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$lob = cubrid_lob2_new($conn, 'BLOB');
// Cursor weit vorwärts setzen (über 32-Bit-Grenze)
cubrid_lob2_seek64($lob, '3000000000', CUBRID_CURSOR_FIRST);
$pos32 = cubrid_lob2_tell($lob); // Kann überlaufen!
$pos64 = cubrid_lob2_tell64($lob); // Sicherer 64-Bit-String
echo "32-Bit-Tell: " . var_export($pos32, true) . "\n";
echo "64-Bit-Tell: " . $pos64 . "\n";
cubrid_lob2_close($lob);
cubrid_disconnect($conn);
?>
// Wichtig · Fallstricke
32-Bit-Systeme: Auf 32-Bit-PHP-Installationen kann cubrid_lob2_tell() für LOB-Positionen über ~2 GB einen falschen Wert oder false zurückgeben. Verwende in solchen Fällen ausschließlich cubrid_lob2_tell64(), da dieser Wert als String zurückgeliefert wird und keine Präzisionsverluste auftreten.
Der zurückgegebene String enthält eine rein numerische Darstellung. Für Berechnungen mit sehr großen Werten empfiehlt sich die Verwendung der bcmath-Erweiterung (z. B. bcadd()), um Überläufe bei Integer-Casts zu vermeiden.