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