Start · Sprachen · PHP · Referenz · ocinewdescriptor

ocinewdescriptor

Funktion

Alias von <code>oci_new_descriptor()</code> — initialisiert einen neuen leeren LOB- oder FILE-Deskriptor für Oracle-Verbindungen.

seit PHP 4.0.0 Kategorie: db

Signatur

ocinewdescriptor(resource $connection, int $type = OCI_DTYPE_LOB): OCI-Lob|false

Beschreibung

ocinewdescriptor() ist ein veralteter Alias der Funktion oci_new_descriptor(). Die Funktion erstellt einen neuen, leeren Deskriptor für Oracle Large Objects (LOBs) oder BFILEs und gibt ein OCI-LOB-Objekt zurück, das anschließend zum Lesen oder Schreiben von LOB-Daten verwendet werden kann.

LOB-Deskriptoren werden benötigt, wenn man mit Oracle-Datenbanken große Textmengen (CLOB), Binärdaten (BLOB) oder externe Dateien (BFILE) einfügen, aktualisieren oder abfragen möchte. Das zurückgegebene OCI-LOB-Objekt wird typischerweise als Bind-Variable in einem oci_bind_by_name()-Aufruf verwendet.

Der Parameter type bestimmt den Deskriptor-Typ: OCI_DTYPE_LOB für CLOB/BLOB, OCI_DTYPE_FILE für BFILE und OCI_DTYPE_ROWID für ROWID-Deskriptoren.

Achtung: Diese Funktion ist veraltet (deprecated) und sollte in neuem Code nicht mehr verwendet werden. Stattdessen sollte oci_new_descriptor() genutzt werden. Die Funktion steht für Abwärtskompatibilität zur Verfügung.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine gültige Oracle-Verbindungsressource, wie sie von oci_connect(), oci_pconnect() oder oci_new_connect() zurückgegeben wird.
$type int OCI_DTYPE_LOB Der Typ des Deskriptors. Erlaubte Werte sind OCI_DTYPE_LOB (Standard, für CLOB/BLOB), OCI_DTYPE_FILE (für BFILE) und OCI_DTYPE_ROWID (für ROWID).

Rückgabewert

Typ
OCI-Lob|false
Beschreibung
Gibt bei Erfolg ein OCI-Lob-Objekt zurück, das den neuen Deskriptor repräsentiert. Im Fehlerfall wird false zurückgegeben.

Beispiele

CLOB-Daten in Oracle einfügen

<?php
$conn = oci_connect('benutzer', 'passwort', 'meine_db');

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

$clob = ocinewdescriptor($conn, OCI_DTYPE_LOB);

$stmt = oci_parse($conn, "INSERT INTO artikel (id, inhalt) VALUES (1, :inhalt) RETURNING inhalt INTO :inhalt");
oci_bind_by_name($stmt, ':inhalt', $clob, -1, OCI_B_CLOB);

oci_execute($stmt, OCI_DEFAULT);

$clob->save('Dies ist ein langer Artikeltext, der als CLOB gespeichert wird.');

oci_commit($conn);

$clob->free();
oci_free_statement($stmt);
oci_close($conn);

echo "CLOB erfolgreich gespeichert.";
?>
CLOB erfolgreich gespeichert.

BLOB-Deskriptor lesen

<?php
$conn = oci_connect('benutzer', 'passwort', 'meine_db');

$stmt = oci_parse($conn, 'SELECT bild FROM produkte WHERE id = 42');
oci_execute($stmt);

oci_fetch($stmt);

$blob = oci_result($stmt, 'BILD');

if ($blob instanceof OCI_Lob) {
    $bilddaten = $blob->load();
    header('Content-Type: image/jpeg');
    echo $bilddaten;
    $blob->free();
}

oci_free_statement($stmt);
oci_close($conn);
?>

// Wichtig · Fallstricke

Deprecated: ocinewdescriptor() ist ein Alias für oci_new_descriptor() und gilt als veraltet. Es wird empfohlen, in neuem Code ausschließlich oci_new_descriptor() zu verwenden, da Aliase in zukünftigen PHP-Versionen entfernt werden könnten.

Nach der Verwendung eines LOB-Deskriptors sollte stets die Methode free() auf dem OCI-LOB-Objekt aufgerufen werden, um den belegten Speicher freizugeben und Ressourcenlecks zu vermeiden.

Beim Arbeiten mit BLOBs und CLOBs sind Transaktionen zu beachten: LOB-Operationen sollten innerhalb einer Transaktion (OCI_DEFAULT beim Ausführen und anschließendem oci_commit()) durchgeführt werden, um Datenkonsistenz zu gewährleisten.