Start · Sprachen · PHP · Referenz · oci_statement_type

oci_statement_type

Funktion

Gibt den SQL-Typ eines vorbereiteten OCI8-Statements als Zeichenkette zurück (z. B. <code>SELECT</code>, <code>INSERT</code>, <code>UPDATE</code>).

seit PHP 5.0.0 Kategorie: db

Signatur

oci_statement_type(resource $statement): string|false

Beschreibung

oci_statement_type() ermittelt, um welchen SQL-Befehlstyp es sich bei einem mit oci_parse() vorbereiteten Statement handelt. Die Funktion ist nützlich, wenn Statements dynamisch erzeugt oder entgegengenommen werden und der Code je nach Befehlstyp unterschiedlich reagieren soll – beispielsweise um zu entscheiden, ob ein Ergebnis abgerufen werden muss oder ob nur ein Commit benötigt wird.

Mögliche Rückgabewerte sind: SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, ALTER, BEGIN, DECLARE, CALL, EXPLAIN PLAN sowie UNKNOWN für alle nicht erkannten Statement-Typen.

Die Funktion eignet sich besonders in generischen Datenbankwrappern oder Abstraktionsschichten, die SQL-Statements verarbeiten und je nach Typ unterschiedliche Nachbehandlungen (z. B. Fetch-Schleifen, Commit, Zeilen-Zählung) durchführen müssen. Sie setzt voraus, dass das Statement bereits mit oci_parse() erstellt, aber nicht zwingend ausgeführt wurde.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, das zuvor mit oci_parse() erzeugt wurde.

Rückgabewert

Typ
string|false
Beschreibung
Gibt einen String mit dem SQL-Befehlstyp in Großbuchstaben zurück (z. B. SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, BEGIN, DECLARE, CALL, UNKNOWN). Bei einem Fehler wird false zurückgegeben.

Beispiele

Statement-Typ eines SELECT ermitteln

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

$sql  = 'SELECT * FROM employees WHERE department_id = :dept';
$stmt = oci_parse($conn, $sql);

$type = oci_statement_type($stmt);
echo "Statement-Typ: " . $type . PHP_EOL; // Statement-Typ: SELECT

oci_free_statement($stmt);
oci_close($conn);
Statement-Typ: SELECT

Generischer Handler: Fetch nur bei SELECT ausführen

<?php
function execute_sql($conn, string $sql): void
{
    $stmt = oci_parse($conn, $sql);
    $type = oci_statement_type($stmt);

    oci_execute($stmt);

    if ($type === 'SELECT') {
        echo "Ergebniszeilen:" . PHP_EOL;
        while ($row = oci_fetch_assoc($stmt)) {
            echo implode(', ', $row) . PHP_EOL;
        }
    } elseif (in_array($type, ['INSERT', 'UPDATE', 'DELETE'], true)) {
        $affected = oci_num_rows($stmt);
        echo "Betroffene Zeilen ({$type}): {$affected}" . PHP_EOL;
    } else {
        echo "Statement vom Typ '{$type}' ausgeführt." . PHP_EOL;
    }

    oci_free_statement($stmt);
}

$conn = oci_connect('user', 'password', 'localhost/XE');
execute_sql($conn, "INSERT INTO log_table (msg) VALUES ('Test')");
oci_commit($conn);
oci_close($conn);
Betroffene Zeilen (INSERT): 1

// Wichtig · Fallstricke

Verbindungsvoraussetzung: Die OCI8-Extension muss aktiviert sein und eine Oracle-Datenbankverbindung muss bestehen. Die Funktion ist nur für Oracle-Datenbanken verfügbar.

Statement muss geparst sein: Das Statement-Handle muss mit oci_parse() erstellt worden sein. Ein noch nicht geparstes oder bereits freigegebenes Handle führt zu einem Fehler.

Nicht erkannte Typen: SQL-Dialekte oder proprietäre Oracle-Befehle, die nicht in der internen Typliste enthalten sind, liefern UNKNOWN zurück – dies ist kein Fehler.