Start · Sprachen · PHP · Referenz · odbc_primarykeys

odbc_primarykeys

Funktion

Gibt ein Ergebnis-Handle zurück, das die Primärschlüsselspalten einer angegebenen Tabelle über eine ODBC-Verbindung enthält.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_primarykeys(resource $odbc, ?string $catalog, string $schema, string $table): resource|false

Beschreibung

odbc_primarykeys() ruft über eine bestehende ODBC-Verbindung die Informationen zu den Primärschlüsseln einer bestimmten Tabelle ab. Die zurückgegebene Ergebnismenge enthält für jede Primärschlüsselspalte eine Zeile mit Metadaten, wie Katalog, Schema, Tabellenname, Spaltenname, Schlüsselsequenz und den optionalen Constraint-Namen.

Die Funktion ist besonders nützlich, wenn zur Laufzeit herausgefunden werden soll, welche Spalten einer Tabelle den Primärschlüssel bilden – z. B. beim Aufbau generischer CRUD-Schichten oder bei der automatischen Generierung von SQL-Statements ohne vorher das Datenbankschema zu kennen.

Das zurückgegebene ODBC-Ergebnis-Handle kann wie ein normales Abfrageergebnis mit odbc_fetch_row(), odbc_fetch_array() oder ähnlichen Funktionen durchlaufen werden. Die Spalten der Ergebnismenge entsprechen dem ODBC-Standard: TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, KEY_SEQ und PK_NAME.

Nicht alle ODBC-Treiber unterstützen diese Funktion vollständig. Bei Treibern, die keine Katalog- oder Schema-Filterung unterstützen, kann null übergeben werden, um die Einschränkung zu umgehen.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine aktive ODBC-Verbindungsressource, wie sie von odbc_connect() oder odbc_pconnect() zurückgegeben wird.
$catalog Pflicht ?string Der Katalogname (auch als Datenbankname bekannt). null bedeutet, dass kein Katalogfilter angewendet wird. Viele Treiber akzeptieren hier null oder einen leeren String.
$schema Pflicht string Der Schema-Name der Tabelle. Ein leerer String oder null deaktiviert die Schema-Filterung, sofern der Treiber dies unterstützt.
$table Pflicht string Der Name der Tabelle, deren Primärschlüssel ermittelt werden sollen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg ein ODBC-Ergebnis-Handle zurück, das mit den Standard-ODBC-Fetch-Funktionen ausgelesen werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Primärschlüssel einer Tabelle auflisten

<?php
$conn = odbc_connect('MyDSN', 'user', 'password');

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

$result = odbc_primarykeys($conn, null, 'dbo', 'customers');

if ($result === false) {
    die('Fehler beim Abrufen der Primärschlüssel: ' . odbc_errormsg($conn));
}

echo "Primärschlüssel der Tabelle 'customers':\n";
while (odbc_fetch_row($result)) {
    $columnName = odbc_result($result, 'COLUMN_NAME');
    $keySeq    = odbc_result($result, 'KEY_SEQ');
    $pkName    = odbc_result($result, 'PK_NAME');
    echo "  Spalte: {$columnName}, Sequenz: {$keySeq}, Constraint: {$pkName}\n";
}

odbc_free_result($result);
odbc_close($conn);
Primärschlüssel der Tabelle 'customers': Spalte: customer_id, Sequenz: 1, Constraint: PK_customers

Primärschlüssel in ein Array einlesen

<?php
$conn = odbc_connect('MyDSN', 'user', 'password');

function getPrimaryKeys(resource $conn, string $table, string $schema = ''): array {
    $result = odbc_primarykeys($conn, null, $schema, $table);
    if ($result === false) {
        return [];
    }
    $keys = [];
    while ($row = odbc_fetch_array($result)) {
        $keys[] = [
            'column'     => $row['COLUMN_NAME'],
            'sequence'   => $row['KEY_SEQ'],
            'constraint' => $row['PK_NAME'],
        ];
    }
    odbc_free_result($result);
    // Sortierung nach Schlüsselsequenz sicherstellen
    usort($keys, fn($a, $b) => $a['sequence'] <=> $b['sequence']);
    return $keys;
}

$primaryKeys = getPrimaryKeys($conn, 'orders', 'dbo');
print_r($primaryKeys);

odbc_close($conn);
Array ( [0] => Array ( [column] => order_id [sequence] => 1 [constraint] => PK_orders ) )

// Wichtig · Fallstricke

Treiberabhängigkeit: Nicht alle ODBC-Treiber implementieren die zugrunde liegende ODBC-Funktion SQLPrimaryKeys vollständig. Bei älteren oder weniger standardkonformen Treibern kann die Funktion false zurückgeben oder eine leere Ergebnismenge liefern, obwohl Primärschlüssel existieren.

Ressourcen freigeben: Das zurückgegebene Ergebnis-Handle sollte nach der Verarbeitung mit odbc_free_result() freigegeben werden, um Speicherlecks zu vermeiden.

Groß-/Kleinschreibung: Tabellen- und Schemanamen sind je nach Datenbanksystem und ODBC-Treiber möglicherweise case-sensitiv. Im Zweifelsfall die exakte Schreibweise aus dem Datenbankschema verwenden.