Start · Sprachen · PHP · Referenz · ocibindbyname

ocibindbyname

Funktion

Veralteter Alias von <code>oci_bind_by_name()</code> — bindet eine PHP-Variable an einen benannten Platzhalter in einem OCI-Statement.

seit PHP 4.0.0 Kategorie: db

Signatur

ocibindbyname(resource $statement, string $param_name, mixed &$variable, int $max_length = -1, int $type = SQLT_CHR): bool

Beschreibung

ocibindbyname() ist ein veralteter Alias der Funktion oci_bind_by_name(). Beide Funktionen binden eine PHP-Variable an einen benannten Platzhalter (z. B. :varname) in einem vorbereiteten OCI8-Statement. Dies ist der empfohlene Weg, um Benutzerdaten sicher an Oracle-SQL-Abfragen zu übergeben, da die Bindung SQL-Injection effektiv verhindert.

Die Bindung erfolgt per Referenz, d. h. der Wert der PHP-Variable wird erst beim Ausführen des Statements mit oci_execute() ausgelesen. So kann dieselbe gebundene Variable für mehrere Ausführungen desselben Statements verwendet werden, ohne das Statement neu zu parsen.

Mit dem Parameter $max_length wird die maximale Datenlänge für OUT-Bindungen festgelegt. Für IN-Bindungen kann -1 übergeben werden, damit PHP die Länge automatisch bestimmt. Über den Parameter $type lässt sich der Oracle-Datentyp steuern, z. B. für LOB-, ROWID- oder CURSOR-Typen.

Hinweis: Da es sich um einen veralteten Alias handelt, sollte in neuem Code ausschließlich oci_bind_by_name() verwendet werden.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, wie es von oci_parse() zurückgegeben wird.
$param_name Pflicht string Der Name des Platzhalters im SQL-Statement, einschließlich des führenden Doppelpunkts, z. B. ':name'.
$variable Pflicht mixed Die PHP-Variable, die an den Platzhalter gebunden wird. Wird per Referenz übergeben; ihr Wert wird erst beim Ausführen des Statements gelesen.
$max_length int -1 Die maximale Länge der zu bindenden Daten in Bytes. Bei -1 wird die aktuelle Länge von $variable verwendet. Für OUT-Parameter muss hier explizit eine Länge angegeben werden.
$type int SQLT_CHR Der Oracle-Datentyp der Bindung. Mögliche Werte sind z. B. SQLT_CHR (Standard, Zeichenkette), SQLT_CLOB, SQLT_BLOB, SQLT_INT, SQLT_NUM oder OCI_B_CURSOR.

Rückgabewert

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

Beispiele

Einfache IN-Bindung für eine SELECT-Abfrage

<?php
$conn = oci_connect('user', 'password', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$sql = 'SELECT first_name, last_name FROM employees WHERE department_id = :dept_id';
$stmt = oci_parse($conn, $sql);

$deptId = 10;
// Veralteter Alias – in neuem Code oci_bind_by_name() verwenden
ocibindbyname($stmt, ':dept_id', $deptId, -1, SQLT_INT);

oci_execute($stmt);

while ($row = oci_fetch_assoc($stmt)) {
    echo $row['FIRST_NAME'] . ' ' . $row['LAST_NAME'] . PHP_EOL;
}

oci_free_statement($stmt);
oci_close($conn);
John Doe Jane Smith

Mehrfaches Ausführen mit geändertem Bindungswert

<?php
$conn = oci_connect('user', 'password', 'localhost/XE');

$sql = 'INSERT INTO log_entries (log_message) VALUES (:msg)';
$stmt = oci_parse($conn, $sql);

$message = '';
ocibindbyname($stmt, ':msg', $message, 200);

$messages = ['Benutzer angemeldet', 'Datei hochgeladen', 'Benutzer abgemeldet'];
foreach ($messages as $msg) {
    $message = $msg; // Variable per Referenz gebunden – kein erneutes Binden nötig
    oci_execute($stmt);
}

echo count($messages) . ' Einträge eingefügt.';

oci_free_statement($stmt);
oci_close($conn);
3 Einträge eingefügt.

// Wichtig · Fallstricke

Veraltet: ocibindbyname() ist ein Alias aus frühen PHP-Versionen und sollte in neuem Code nicht mehr verwendet werden. Nutze stattdessen oci_bind_by_name().

Sicherheit: Durch die Verwendung von Bind-Variablen werden SQL-Injection-Angriffe verhindert, da die übergebenen Werte niemals direkt in den SQL-Text eingebettet werden. Die Werte werden separat an Oracle übergeben und dort korrekt typisiert ausgewertet.

Performance: Oracle kann vorbereitete Statements mit Bind-Variablen im Shared Pool cachen (Soft Parse). Wenn dieselbe SQL-Struktur häufig ausgeführt wird, verbessert die Bindung die Performance erheblich im Vergleich zu dynamisch zusammengesetzten SQL-Strings.

OUT-Parameter: Für OUT- und IN/OUT-Parameter eines PL/SQL-Blocks muss $max_length immer explizit auf einen ausreichend großen Wert gesetzt werden, da PHP sonst nicht genug Speicher für den Rückgabewert reserviert.