Signatur
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
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.";
?>
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.