Start · Sprachen · PHP · Referenz · odbc_procedurecolumns

odbc_procedurecolumns

Funktion

Ruft Metadaten zu den Parametern (Spalten) gespeicherter Prozeduren aus einer ODBC-Datenquelle ab.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_procedurecolumns(resource $odbc, ?string $catalog = null, ?string $schema = null, ?string $procedure = null, ?string $column = null): resource|false

Beschreibung

odbc_procedurecolumns() liefert Informationen über die Ein- und Ausgabeparameter sowie Rückgabewerte von gespeicherten Prozeduren (Stored Procedures) in einer über ODBC angebundenen Datenquelle. Das Ergebnis kann verwendet werden, um die Parameterstruktur einer Prozedur dynamisch zu ermitteln, ohne das Datenbankschema manuell zu kennen.

Die Funktion gibt ein ODBC-Ergebnis-Handle zurück, das wie ein normales Abfrageergebnis mit odbc_fetch_row(), odbc_result() oder ähnlichen Funktionen ausgelesen werden kann. Jede Zeile des Ergebnisses beschreibt einen Parameter oder eine Ergebnis-Spalte der Prozedur.

Die zurückgegebenen Spalten folgen dem ODBC-Standard und umfassen u. a. PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME, COLUMN_NAME, COLUMN_TYPE (z. B. IN, OUT, INOUT), DATA_TYPE, TYPE_NAME, PRECISION, LENGTH, SCALE, NULLABLE und REMARKS.

Diese Funktion ist besonders nützlich für generische Datenbankwerkzeuge, ORMs oder Introspektions-Bibliotheken, die prozedurbasierte Datenbankzugriffe automatisieren sollen.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine gültige ODBC-Verbindungsressource, wie sie von odbc_connect() oder odbc_pconnect() zurückgegeben wird.
$catalog ?string null Der Name des Katalogs (Datenbank) in der Datenquelle. Bei null oder leerem String wird kein Katalog-Filter angewendet (datenbankabhängig).
$schema ?string null Das Datenbankschema, in dem die Prozedur liegt. Unterstützt je nach ODBC-Treiber Suchmuster mit % und _.
$procedure ?string null Der Name der gespeicherten Prozedur. Unterstützt je nach ODBC-Treiber Suchmuster mit % und _. Bei null werden alle Prozeduren berücksichtigt.
$column ?string null Der Name des Parameters bzw. der Spalte, nach dem gefiltert werden soll. Unterstützt Suchmuster. Bei null werden alle Parameter zurückgegeben.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt im Erfolgsfall eine ODBC-Ergebnis-Ressource zurück, die mit den üblichen ODBC-Ergebnisfunktionen ausgelesen werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Alle Parameter einer gespeicherten Prozedur auflisten

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Parameter der Prozedur 'get_user_info' abfragen
$result = odbc_procedurecolumns($conn, null, null, 'get_user_info', null);

if ($result === false) {
    die('Fehler beim Abrufen der Prozedurparameter');
}

while (odbc_fetch_row($result)) {
    $colName  = odbc_result($result, 'COLUMN_NAME');
    $colType  = odbc_result($result, 'COLUMN_TYPE'); // 1=IN, 2=INOUT, 3=Result, 4=?, 5=OUT
    $dataType = odbc_result($result, 'TYPE_NAME');
    $nullable = odbc_result($result, 'NULLABLE');
    echo "Parameter: $colName | Typ: $colType | Datentyp: $dataType | Nullable: $nullable\n";
}

odbc_free_result($result);
odbc_close($conn);
Parameter: user_id | Typ: 1 | Datentyp: INTEGER | Nullable: 0 Parameter: user_name | Typ: 5 | Datentyp: VARCHAR | Nullable: 1

Alle OUT-Parameter aller Prozeduren ermitteln

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Alle Prozeduren im Schema 'dbo', alle Parameter
$result = odbc_procedurecolumns($conn, null, 'dbo', '%', '%');

if ($result === false) {
    die('Fehler');
}

echo "OUT-Parameter:\n";
while (odbc_fetch_row($result)) {
    $colType = odbc_result($result, 'COLUMN_TYPE');
    // COLUMN_TYPE 5 = SQL_PARAM_OUTPUT
    if ($colType == 5) {
        $procName = odbc_result($result, 'PROCEDURE_NAME');
        $colName  = odbc_result($result, 'COLUMN_NAME');
        $dataType = odbc_result($result, 'TYPE_NAME');
        echo "  Prozedur: $procName, Parameter: $colName ($dataType)\n";
    }
}

odbc_free_result($result);
odbc_close($conn);
OUT-Parameter: Prozedur: berechne_summe, Parameter: ergebnis (DECIMAL)

// Wichtig · Fallstricke

Treiber-Abhängigkeit: Das genaue Verhalten, die unterstützten Suchmuster sowie die Belegung von COLUMN_TYPE hängen stark vom verwendeten ODBC-Treiber ab. Nicht alle Treiber unterstützen alle Filtermöglichkeiten.

COLUMN_TYPE-Werte folgen dem ODBC-Standard: 0 = unbekannt, 1 = IN, 2 = INOUT, 3 = Ergebnisspalte, 4 = Rückgabewert, 5 = OUT.

Ab PHP 8.0 werden ODBC-Verbindungsressourcen intern als Objekte vom Typ Odbc\Connection und Ergebnisse als Odbc\Result behandelt, bleiben aber nach außen rückwärtskompatibel.

Ressourcen sollten nach der Verwendung stets mit odbc_free_result() freigegeben werden, um Speicher nicht unnötig zu belegen.