Signatur
Beschreibung
cubrid_lob2_size64() ermittelt die Größe eines LOB-Objekts (Large Object), das zuvor aus einer CUBRID-Datenbank geholt wurde. Der Rückgabewert ist eine Zeichenkette (String), die die Größe in Bytes repräsentiert. Im Gegensatz zu cubrid_lob2_size() liefert diese Funktion das Ergebnis als String, um auch Größen zu unterstützen, die den 32-Bit-Integer-Bereich übersteigen — relevant auf 32-Bit-Plattformen oder bei sehr großen LOB-Objekten.
LOB-Objekte werden in CUBRID für die Speicherung großer Binär- (BLOB) oder Textdaten (CLOB) verwendet. Bevor die Größe abgefragt werden kann, muss das LOB-Objekt über eine Datenbankabfrage geladen worden sein, z. B. via cubrid_fetch() oder cubrid_lob2_new().
Die Funktion ist besonders nützlich, wenn Dateigrößen überprüft, Speicherzuweisungen geplant oder Fortschrittsanzeigen beim Lesen von LOB-Daten realisiert werden sollen. Da der Rückgabewert ein String ist, sollte er bei arithmetischen Operationen mit bcmath- oder gmp-Funktionen verarbeitet werden, um Überläufe zu vermeiden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $lob_identifier Pflicht | resource | Ein LOB-Identifikator (Ressource), der durch eine CUBRID-Datenbankabfrage oder cubrid_lob2_new() erzeugt wurde. |
Rückgabewert
false zurückgegeben, etwa wenn das übergebene Argument kein gültiger LOB-Identifikator ist.Beispiele
Größe eines BLOB-Objekts ermitteln
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$req = cubrid_execute($conn, "SELECT image FROM product WHERE id = 1");
if ($req) {
$row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);
$lob = $row[0];
$size = cubrid_lob2_size64($lob);
if ($size !== false) {
echo "LOB-Größe: " . $size . " Bytes" . PHP_EOL;
} else {
echo "Fehler beim Abrufen der LOB-Größe." . PHP_EOL;
}
cubrid_lob2_close($lob);
cubrid_close_request($req);
}
cubrid_disconnect($conn);
?>
LOB-Größe mit BCMath verarbeiten
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$req = cubrid_execute($conn, "SELECT document FROM archive WHERE id = 42");
if ($req) {
$row = cubrid_fetch($req, CUBRID_NUM | CUBRID_LOB);
$lob = $row[0];
$sizeBytes = cubrid_lob2_size64($lob);
if ($sizeBytes !== false) {
// Umrechnung in Megabytes mit BCMath (sichere Ganzzahl-Arithmetik)
$sizeMB = bcdiv($sizeBytes, bcpow('1024', '2'), 2);
echo "LOB-Größe: " . $sizeMB . " MB" . PHP_EOL;
}
cubrid_lob2_close($lob);
cubrid_close_request($req);
}
cubrid_disconnect($conn);
?>
// Wichtig · Fallstricke
Plattformabhängigkeit: Auf 32-Bit-Systemen kann der Rückgabewert von cubrid_lob2_size() überlaufen, wenn die LOB-Größe den Integer-Maximalwert überschreitet. cubrid_lob2_size64() umgeht dieses Problem durch die Rückgabe als String. Für arithmetische Berechnungen mit dem Ergebnis empfiehlt sich die Verwendung der BCMath- oder GMP-Erweiterung.
Die Funktion setzt eine aktive CUBRID-Verbindung sowie einen gültigen LOB-Identifikator voraus. Nach der Verwendung sollte das LOB-Objekt mit cubrid_lob2_close() explizit geschlossen werden, um Ressourcen freizugeben.