Start · Sprachen · PHP · Referenz · cubrid_lob2_write

cubrid_lob2_write

Funktion

Schreibt Daten aus einem String-Puffer in ein CUBRID-LOB2-Objekt an der aktuellen Cursor-Position.

seit PHP 8.4.1 Kategorie: db

Signatur

cubrid_lob2_write(resource $lob_identifier, string $buf): bool

Beschreibung

cubrid_lob2_write() schreibt den Inhalt des übergebenen Strings $buf in ein zuvor mit cubrid_lob2_new() oder aus einem Abfrageergebnis erhaltenes LOB2-Objekt (Large Object). Das Schreiben beginnt an der aktuellen Cursor-Position des LOB-Objekts; nach dem Schreiben wird der Cursor entsprechend der Anzahl geschriebener Bytes vorgerückt.

LOB-Objekte werden in CUBRID genutzt, um besonders große Datenmengen wie Binärdateien (BLOB) oder große Texte (CLOB) effizient in der Datenbank zu speichern, ohne den gesamten Inhalt auf einmal in den Arbeitsspeicher laden zu müssen. Mit cubrid_lob2_write() können Daten stückweise in das LOB geschrieben werden.

Typischer Einsatz: Nach dem Anlegen eines neuen LOB-Objekts mit cubrid_lob2_new() werden die Daten in mehreren Durchläufen mit cubrid_lob2_write() befüllt, bevor das LOB-Objekt an eine INSERT- oder UPDATE-Anweisung übergeben wird.

Nach Abschluss aller Schreibvorgänge sollte das LOB-Objekt mit cubrid_lob2_close() freigegeben werden, um Ressourcen sauber zu schließen.

Parameter

Name Typ Default Beschreibung
$lob_identifier Pflicht resource Ein gültiges LOB2-Ressource-Handle, wie es von cubrid_lob2_new() oder beim Lesen aus einem CUBRID-Abfrageergebnis zurückgegeben wird.
$buf Pflicht string Der Daten-Puffer als String, dessen Inhalt in das LOB-Objekt geschrieben wird. Kann sowohl Binärdaten (für BLOB) als auch Text (für CLOB) enthalten.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Gibt false zurück, wenn ein Fehler aufgetreten ist, z. B. wenn das LOB-Handle ungültig ist oder ein Datenbankfehler vorliegt.

Beispiele

BLOB-Objekt mit cubrid_lob2_write() befüllen und speichern

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');

// Neues BLOB-Objekt anlegen
$lob = cubrid_lob2_new($conn, 'BLOB');

// Binäre Daten (z. B. Dateiinhalt) in das LOB schreiben
$fileData = file_get_contents('/var/data/image.png');
$result = cubrid_lob2_write($lob, $fileData);

if ($result) {
    echo "Daten erfolgreich in LOB geschrieben.\n";
} else {
    echo "Fehler beim Schreiben in das LOB-Objekt.\n";
}

// LOB per Prepared Statement in die Tabelle einfügen
$req = cubrid_prepare($conn, 'INSERT INTO images (name, data) VALUES (?, ?)');
cubrid_bind($req, 1, 'image.png');
cubrid_bind($req, 2, $lob, 'BLOB');
cubrid_execute($req);

cubrid_lob2_close($lob);
cubrid_disconnect($conn);
echo "Bild gespeichert.\n";
?>
Daten erfolgreich in LOB geschrieben. Bild gespeichert.

CLOB-Objekt schrittweise mit Textdaten befüllen

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');

// Neues CLOB-Objekt anlegen
$clob = cubrid_lob2_new($conn, 'CLOB');

// Textdaten in mehreren Blöcken schreiben
$chunks = [
    'Erste Zeile des Dokuments.\n',
    'Zweite Zeile mit weiteren Informationen.\n',
    'Abschlusszeile des Dokuments.\n',
];

foreach ($chunks as $chunk) {
    if (!cubrid_lob2_write($clob, $chunk)) {
        echo "Fehler beim Schreiben eines Blocks.\n";
        cubrid_lob2_close($clob);
        cubrid_disconnect($conn);
        exit;
    }
}

echo "Alle Blöcke erfolgreich geschrieben.\n";

$req = cubrid_prepare($conn, 'INSERT INTO documents (title, content) VALUES (?, ?)');
cubrid_bind($req, 1, 'Mein Dokument');
cubrid_bind($req, 2, $clob, 'CLOB');
cubrid_execute($req);

cubrid_lob2_close($clob);
cubrid_disconnect($conn);
echo "Dokument gespeichert.\n";
?>
Alle Blöcke erfolgreich geschrieben. Dokument gespeichert.

// Wichtig · Fallstricke

Cursor-Position beachten: Jeder Aufruf von cubrid_lob2_write() schreibt ab der aktuellen Cursor-Position. Soll von vorne geschrieben werden, muss der Cursor vorher mit cubrid_lob2_seek() bzw. cubrid_lob2_seek64() auf Position 0 gesetzt werden.

Zeichenkodierung bei CLOB: Bei CLOB-Objekten sollte darauf geachtet werden, dass die Zeichenkodierung des übergebenen Strings mit der der Datenbank übereinstimmt, um Datenverlust oder Darstellungsfehler zu vermeiden.

Ressourcen freigeben: LOB-Objekte belegen Datenbankressourcen. cubrid_lob2_close() sollte immer nach Abschluss der Schreibvorgänge aufgerufen werden, besonders in langlebigen Prozessen oder Schleifen.