Start · Sprachen · PHP · Referenz · ociexecute

ociexecute

Funktion

Veralteter Alias von <code>oci_execute()</code> — führt eine vorbereitete OCI-Anweisung gegen eine Oracle-Datenbank aus.

seit PHP 4.0.0 Kategorie: db

Signatur

ociexecute(resource $statement, int $mode = OCI_COMMIT_ON_SUCCESS): bool

Beschreibung

ociexecute() ist ein veralteter Alias der Funktion oci_execute() und führt eine zuvor mit ociparse() (bzw. oci_parse()) vorbereitete Oracle-Datenbank-Anweisung aus. Die Funktion ist seit PHP 5.4.0 als deprecated markiert und sollte in neuem Code nicht mehr verwendet werden.

Der optionale Parameter $mode steuert das Transaktionsverhalten: Mit dem Standardwert OCI_COMMIT_ON_SUCCESS wird die Transaktion nach der erfolgreichen Ausführung automatisch committet. Alternativ kann OCI_NO_AUTO_COMMIT verwendet werden, um Änderungen manuell per oci_commit() zu bestätigen oder per oci_rollback() zurückzurollen.

Bei SELECT-Anweisungen werden die Ergebniszeilen erst durch einen anschließenden Abruf (z. B. oci_fetch_assoc()) tatsächlich aus der Datenbank gelesen. Für DML-Anweisungen (INSERT, UPDATE, DELETE) gilt die Änderung erst nach dem Commit als dauerhaft gespeichert.

Wichtig: In neuem Code sollte ausschließlich oci_execute() verwendet werden, da ociexecute() in zukünftigen PHP-Versionen entfernt werden könnte.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI-Statement-Handle, das zuvor mit ociparse() oder oci_parse() erzeugt wurde.
$mode int OCI_COMMIT_ON_SUCCESS Ausführungsmodus. Mögliche Werte: OCI_COMMIT_ON_SUCCESS (Standard, automatisches Commit), OCI_NO_AUTO_COMMIT (manuelle Transaktionskontrolle) oder OCI_DESCRIBE_ONLY (nur Metadaten abrufen, keine Ausführung).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige SQL-Syntax oder fehlgeschlagene Datenbankverbindung).

Beispiele

Einfache SELECT-Abfrage mit ociexecute (Legacy-Code)

<?php
// Veralteter Stil – nur zur Illustration von Legacy-Code
$conn = ocilogon('benutzer', 'passwort', 'meine_db');

if (!$conn) {
    $e = ocierror();
    trigger_error('Verbindungsfehler: ' . $e['message'], E_USER_ERROR);
}

$sql = 'SELECT id, name FROM kunden WHERE aktiv = 1';
$stmt = ociparse($conn, $sql);

if (!ociexecute($stmt)) {
    $e = ocierror($stmt);
    trigger_error('Ausführungsfehler: ' . $e['message'], E_USER_ERROR);
}

while ($row = ocifetchinto($stmt, $data, OCI_ASSOC)) {
    echo $data['ID'] . ': ' . $data['NAME'] . PHP_EOL;
}

ocilogoff($conn);
1: Max Mustermann 2: Erika Musterfrau

Empfohlene moderne Alternative mit oci_execute

<?php
// Moderner Stil – so sollte es heute aussehen
$conn = oci_connect('benutzer', 'passwort', 'meine_db');

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

$sql = 'INSERT INTO bestellungen (kunde_id, betrag) VALUES (:kid, :bet)';
$stmt = oci_parse($conn, $sql);

$kundeId = 42;
$betrag  = 199.99;
oci_bind_by_name($stmt, ':kid', $kundeId);
oci_bind_by_name($stmt, ':bet', $betrag);

// Manuelle Transaktionskontrolle
if (oci_execute($stmt, OCI_NO_AUTO_COMMIT)) {
    oci_commit($conn);
    echo 'Bestellung erfolgreich gespeichert.';
} else {
    oci_rollback($conn);
    echo 'Fehler beim Speichern der Bestellung.';
}

oci_free_statement($stmt);
oci_close($conn);
Bestellung erfolgreich gespeichert.

// Wichtig · Fallstricke

Deprecation: ociexecute() ist seit PHP 5.4.0 als veraltet markiert. Verwende stattdessen oci_execute(). In zukünftigen PHP-Major-Versionen könnte die Funktion ohne Vorwarnung entfernt werden.

Sicherheit: Niemals Benutzereingaben direkt in SQL-Strings einbauen (SQL-Injection). Verwende stets Bind-Variablen über oci_bind_by_name(), um Eingaben sicher zu übergeben.

Transaktionen: Bei Verwendung von OCI_NO_AUTO_COMMIT muss nach erfolgreichen Änderungen explizit oci_commit() aufgerufen werden, andernfalls werden die Änderungen beim Verbindungsabbau automatisch zurückgerollt.