Signatur
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
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);
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);
// 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.