Start · Sprachen · PHP · Referenz · ocidefinebyname

ocidefinebyname

Funktion

Veralteter Alias von <code>oci_define_by_name()</code> – verknüpft eine PHP-Variable mit einer Spalte in einer Oracle-Abfrage.

seit PHP 5.0.0 Kategorie: db

Signatur

ocidefinebyname(resource $statement, string $column_name, mixed &$variable, int $type = 0): bool

Beschreibung

ocidefinebyname() ist ein veralteter Alias der Funktion oci_define_by_name() und gehört zur OCI8-Erweiterung für Oracle-Datenbanken. Die Funktion bindet eine PHP-Variable an eine Ergebnisspalte einer vorbereiteten Oracle-SQL-Abfrage, sodass die Variable bei jedem Aufruf von oci_fetch() automatisch mit dem aktuellen Spaltenwert befüllt wird.

Das Binden von Ausgabespalten ist besonders nützlich, wenn man Ergebnisse einer SELECT-Abfrage zeilenweise durchlaufen möchte, ohne jedes Mal ein assoziatives Array auslesen zu müssen. Nach dem Aufruf von ocidefinebyname() genügt ein wiederholter Aufruf von oci_fetch(), um die gebundenen Variablen automatisch zu aktualisieren.

Wichtig: Diese Funktion ist ein Alias und wird seit PHP 8.0 als veraltet betrachtet. In neuem Code sollte stets oci_define_by_name() verwendet werden. Der Spaltenname in $column_name wird von Oracle standardmäßig in Großbuchstaben umgewandelt, sofern er in der SQL-Abfrage nicht in Anführungszeichen steht.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI-Statement-Handle, das mit oci_parse() erzeugt wurde.
$column_name Pflicht string Der Name der Ergebnisspalte in der SQL-Abfrage. Oracle gibt Spaltennamen standardmäßig in Großbuchstaben zurück, daher muss dieser Parameter ebenfalls großgeschrieben werden (z. B. 'EMPLOYEE_ID').
$variable Pflicht mixed Die PHP-Variable (per Referenz), die an die Spalte gebunden wird. Sie wird bei jedem oci_fetch()-Aufruf automatisch mit dem Spaltenwert befüllt.
$type int 0 Optionaler Datentyp der Rückgabe. Mögliche Werte sind OCI-Konstanten wie SQLT_CHR, SQLT_BIN oder OCI_B_CLOB. Der Standardwert 0 wählt automatisch den passenden Typ.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiges Statement-Handle oder unbekannter Spaltenname).

Beispiele

Spaltenwerte mit ocidefinebyname() zeilenweise lesen

<?php
// Datenbankverbindung herstellen
$conn = oci_connect('benutzer', 'passwort', 'localhost/XEPDB1');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlspecialchars($e['message']), E_USER_ERROR);
}

$sql = 'SELECT employee_id, last_name FROM employees WHERE rownum <= 5';
$stmt = oci_parse($conn, $sql);

// Variablen an Spalten binden (Spaltennamen in Großbuchstaben)
ocidefinebyname($stmt, 'EMPLOYEE_ID', $empId);
ocidefinebyname($stmt, 'LAST_NAME',   $lastName);

oci_execute($stmt);

while (oci_fetch($stmt)) {
    echo "ID: $empId – Name: $lastName\n";
}

oci_free_statement($stmt);
oci_close($conn);
ID: 100 – Name: King ID: 101 – Name: Kochhar ID: 102 – Name: De Haan ID: 103 – Name: Hunold ID: 104 – Name: Ernst

Bevorzugte moderne Variante mit oci_define_by_name()

<?php
// Empfohlene Schreibweise in neuem Code
$conn = oci_connect('benutzer', 'passwort', 'localhost/XEPDB1');
$sql  = 'SELECT department_id, department_name FROM departments WHERE rownum <= 3';
$stmt = oci_parse($conn, $sql);

// oci_define_by_name() statt veraltetem ocidefinebyname()
oci_define_by_name($stmt, 'DEPARTMENT_ID',   $deptId);
oci_define_by_name($stmt, 'DEPARTMENT_NAME', $deptName);

oci_execute($stmt);

while (oci_fetch($stmt)) {
    printf("Abt. %d: %s\n", $deptId, $deptName);
}

oci_free_statement($stmt);
oci_close($conn);
Abt. 10: Administration Abt. 20: Marketing Abt. 30: Purchasing

// Wichtig · Fallstricke

Veraltet: ocidefinebyname() ist ein alter Alias aus der Zeit vor dem OCI8-API-Umbau in PHP 5. Seit PHP 8.0 gelten solche Aliasfunktionen als offiziell veraltet und können in zukünftigen PHP-Versionen entfernt werden. Verwende stets oci_define_by_name().

Der Spaltenname muss exakt dem entsprechen, wie Oracle ihn zurückgibt – standardmäßig in Großbuchstaben. Falls in der SQL-Abfrage ein Alias mit Kleinbuchstaben in Anführungszeichen verwendet wird (z. B. SELECT employee_id AS "empId"), muss der Parameterwert ebenfalls 'empId' lauten.

Die gebundene Variable darf erst nach oci_execute() und oci_fetch() ausgelesen werden – sie ist vor dem ersten Fetch nicht befüllt.