Signatur
Beschreibung
cubrid_lob2_seek() ermöglicht es, den Lese-/Schreibcursor eines LOB-Objekts (Large Object) innerhalb einer CUBRID-Datenbankverbindung an eine beliebige Position zu verschieben. Dies ist nützlich, wenn nur ein bestimmter Ausschnitt eines großen Binär- oder Textdatums gelesen oder geschrieben werden soll, ohne das gesamte Objekt laden zu müssen.
Der Parameter origin legt den Bezugspunkt für den Offset fest: CUBRID_CURSOR_FIRST für den Anfang des LOB, CUBRID_CURSOR_CURRENT für die aktuelle Cursor-Position und CUBRID_CURSOR_LAST für das Ende des LOB. Negative Offset-Werte sind in Kombination mit CUBRID_CURSOR_LAST möglich, um vom Ende rückwärts zu navigieren.
In der Praxis wird diese Funktion typischerweise zusammen mit cubrid_lob2_read() oder cubrid_lob2_write() genutzt, um gezielt bestimmte Datenbereiche innerhalb eines LOB-Feldes zu verarbeiten, z. B. beim Streamen großer Dateien oder beim Aktualisieren von Teilbereichen eines gespeicherten Dokuments.
LOB-Objekte werden mit cubrid_lob2_new() erstellt oder über eine Abfrage mit cubrid_lob2_get() aus der Datenbank geladen und müssen am Ende mit cubrid_lob2_close() freigegeben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $lob_identifier Pflicht | resource | Ein LOB-Ressource-Handle, das zuvor über cubrid_lob2_new() oder cubrid_lob2_get() erzeugt wurde. |
|
| $offset Pflicht | int | Die Anzahl der Bytes, um die der Cursor verschoben werden soll. Kann positiv oder negativ sein, je nach gewähltem origin. |
|
| $origin | int | CUBRID_CURSOR_CURRENT | Bezugspunkt für den Offset. Mögliche Werte: CUBRID_CURSOR_FIRST (Anfang), CUBRID_CURSOR_CURRENT (aktuelle Position, Standard), CUBRID_CURSOR_LAST (Ende). |
Rückgabewert
true zurück, wenn der Cursor erfolgreich bewegt wurde, andernfalls false bei einem Fehler (z. B. ungültiges Handle oder Offset außerhalb der LOB-Grenzen).Beispiele
Teilbereich eines CLOB-Feldes lesen
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$req = cubrid_execute($conn, "SELECT content FROM documents WHERE id = 1");
cubrid_move_cursor($req, 1, CUBRID_CURSOR_FIRST);
$row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);
$lob = $row[0];
// Cursor auf Byte 100 vom Anfang setzen
if (cubrid_lob2_seek($lob, 100, CUBRID_CURSOR_FIRST)) {
// 50 Bytes ab Position 100 lesen
$data = cubrid_lob2_read($lob, 50);
echo "Gelesener Inhalt: " . $data . PHP_EOL;
} else {
echo "Cursor-Bewegung fehlgeschlagen." . PHP_EOL;
}
cubrid_lob2_close($lob);
cubrid_close_request($req);
cubrid_disconnect($conn);
?>
Die letzten 20 Bytes eines BLOB-Feldes lesen
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$req = cubrid_execute($conn, "SELECT file_data FROM files WHERE id = 5");
cubrid_move_cursor($req, 1, CUBRID_CURSOR_FIRST);
$row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);
$lob = $row[0];
// Cursor 20 Bytes vor das Ende setzen
if (cubrid_lob2_seek($lob, -20, CUBRID_CURSOR_LAST)) {
$tail = cubrid_lob2_read($lob, 20);
echo "Letzte 20 Bytes (hex): " . bin2hex($tail) . PHP_EOL;
} else {
echo "Fehler beim Positionieren des Cursors." . PHP_EOL;
}
cubrid_lob2_close($lob);
cubrid_close_request($req);
cubrid_disconnect($conn);
?>
// Wichtig · Fallstricke
Achtung: Wird ein Offset angegeben, der über die Grenzen des LOB-Objekts hinausgeht (vor Byte 0 oder nach dem letzten Byte), schlägt die Funktion fehl und gibt false zurück. Die aktuelle Cursor-Position bleibt dabei unverändert.
Die Konstanten CUBRID_CURSOR_FIRST, CUBRID_CURSOR_CURRENT und CUBRID_CURSOR_LAST müssen verwendet werden; numerische Werte direkt einzusetzen wird nicht empfohlen, da sich interne Konstantenwerte zwischen Versionen unterscheiden können.
Diese Funktion steht nur zur Verfügung, wenn die CUBRID-Erweiterung in PHP installiert und aktiviert ist. Für sehr große LOB-Objekte ist das gezielte Positionieren via cubrid_lob2_seek() deutlich ressourcenschonender als das Einlesen des gesamten Inhalts.