Start · Sprachen · PHP · Referenz · ocisavelob

ocisavelob

Funktion

Veralteter Alias für <code>OCILob::save()</code> — speichert Daten in ein Oracle LOB-Objekt.

seit PHP 5.0.0 Kategorie: db

Signatur

ocisavelob(OCILob $lob, string $data, int $offset = 0): bool

Beschreibung

ocisavelob() ist ein veralteter Alias für die Methode OCILob::save() und ermöglicht das Speichern eines Strings in ein Oracle Large Object (LOB). LOBs werden in Oracle-Datenbanken verwendet, um große Mengen an Daten zu speichern, beispielsweise Texte (CLOB) oder Binärdaten (BLOB).

Der optionale Parameter $offset gibt an, ab welcher Position innerhalb des LOBs die Daten geschrieben werden sollen. Dies erlaubt das teilweise Aktualisieren eines bereits vorhandenen LOBs, ohne den gesamten Inhalt zu ersetzen.

Wichtig: Diese Funktion gilt seit PHP 8.0 als veraltet und wurde entfernt. Es wird dringend empfohlen, stattdessen die objektorientierte Methode OCILob::save() zu verwenden, um Kompatibilität mit aktuellen PHP-Versionen sicherzustellen.

Typischer Einsatz ist das Befüllen von LOB-Feldern nach dem Binden eines LOB-Deskriptors an ein SQL-Statement, das z. B. INSERT oder UPDATE Operationen mit RETURNING ... INTO :lob verwendet.

Parameter

Name Typ Default Beschreibung
$lob Pflicht OCILob Ein gültiger LOB-Deskriptor, der zuvor mit oci_new_descriptor() erzeugt und an ein SQL-Statement gebunden wurde.
$data Pflicht string Die zu speichernden Daten als Zeichenkette. Bei BLOB-Feldern können auch binäre Daten übergeben werden.
$offset int 0 Optionaler Offset in Bytes, ab dem die Daten in das LOB geschrieben werden sollen. Standardmäßig wird vom Anfang des LOBs geschrieben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler, beispielsweise wenn der LOB-Deskriptor ungültig ist oder das Schreiben fehlschlägt.

Beispiele

CLOB in Oracle-Tabelle speichern (prozedural, veraltet)

<?php
// Verbindung zur Oracle-Datenbank herstellen
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');

if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

// LOB-Deskriptor erzeugen
$lob = oci_new_descriptor($conn, OCI_D_LOB);

// SQL mit RETURNING INTO zum Binden des LOBs
$sql = 'INSERT INTO dokumente (id, inhalt) VALUES (seq_dok.NEXTVAL, EMPTY_CLOB()) RETURNING inhalt INTO :lob';
$stmt = oci_parse($conn, $sql);

// LOB-Deskriptor binden
oci_bind_by_name($stmt, ':lob', $lob, -1, OCI_B_CLOB);

// Statement ausführen
oci_execute($stmt, OCI_NO_AUTO_COMMIT);

// Daten in das LOB schreiben (veralteter Alias)
$text = 'Dies ist ein langer Text, der als CLOB gespeichert wird.';
$result = ocisavelob($lob, $text);

if ($result) {
    oci_commit($conn);
    echo "LOB erfolgreich gespeichert.";
} else {
    oci_rollback($conn);
    echo "Fehler beim Speichern des LOBs.";
}

// Ressourcen freigeben
$lob->free();
oci_free_statement($stmt);
oci_close($conn);
?>
LOB erfolgreich gespeichert.

Empfohlene Alternative: OCILob::save() verwenden

<?php
// Verbindung zur Oracle-Datenbank herstellen
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');

if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

// LOB-Deskriptor erzeugen
$lob = oci_new_descriptor($conn, OCI_D_LOB);

$sql = 'INSERT INTO dokumente (id, inhalt) VALUES (seq_dok.NEXTVAL, EMPTY_CLOB()) RETURNING inhalt INTO :lob';
$stmt = oci_parse($conn, $sql);

oci_bind_by_name($stmt, ':lob', $lob, -1, OCI_B_CLOB);
oci_execute($stmt, OCI_NO_AUTO_COMMIT);

// Empfohlene OOP-Methode statt ocisavelob()
$text = 'Inhalt des CLOB-Feldes.';
if ($lob->save($text)) {
    oci_commit($conn);
    echo "LOB erfolgreich gespeichert (OOP-Stil).";
} else {
    oci_rollback($conn);
    echo "Fehler beim Speichern des LOBs.";
}

$lob->free();
oci_free_statement($stmt);
oci_close($conn);
?>
LOB erfolgreich gespeichert (OOP-Stil).

// Wichtig · Fallstricke

Deprecation: ocisavelob() ist seit PHP 8.0 nicht mehr verfügbar und wurde vollständig entfernt. Code, der diese Funktion verwendet, wird unter PHP 8.0 und höher einen fatalen Fehler erzeugen. Migrieren Sie auf die objektorientierte Methode OCILob::save().

Beim Arbeiten mit großen Binärdaten (BLOBs) sollte sichergestellt werden, dass das PHP-Skript keine Zeichensatz-Konvertierungen an den Daten vornimmt. Verwenden Sie bei Bedarf OCI_B_BLOB als Typ beim Binden des Deskriptors.

LOB-Operationen sollten stets innerhalb einer Transaktion durchgeführt werden (OCI_NO_AUTO_COMMIT beim Ausführen des Statements), da das LOB sonst nicht korrekt befüllt werden kann.