Start · Sprachen · PHP · Referenz · cubrid_lob2_tell64

cubrid_lob2_tell64

Funktion

Gibt die aktuelle Cursorposition eines CUBRID-LOB-Objekts als 64-Bit-Wert (String) zurück.

seit PHP 5.3.9 Kategorie: db

Signatur

cubrid_lob2_tell64(resource $lob_identifier): string|false

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

Typ
string|false
Beschreibung
Gibt die aktuelle Cursorposition als numerischen String (64-Bit-Wert in Bytes) zurück. Im Fehlerfall (z. B. ungültiges Handle) wird 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);
?>
Aktuelle Cursorposition: 1024 Bytes

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);
?>
32-Bit-Tell: false 64-Bit-Tell: 3000000000

// 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.