Start · Sprachen · PHP · Referenz · db2_primary_keys

db2_primary_keys

Funktion

Liefert ein Ergebnis-Ressource mit den Primärschlüsseln einer Tabelle einer IBM Db2-, Cloudscape- oder Apache Derby-Datenbank.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_primary_keys(resource $connection, string|null $qualifier, string|null $schema, string $table_name): resource|false

Beschreibung

db2_primary_keys() fragt die Metadaten einer Datenbankverbindung ab und gibt eine Ergebnis-Ressource zurück, die Informationen über alle Primärschlüsselspalten der angegebenen Tabelle enthält. Die Funktion gehört zur IBM DB2-Erweiterung und ist besonders nützlich, wenn Schema-Informationen zur Laufzeit ermittelt werden müssen – etwa beim automatischen Generieren von ORM-Mappings oder Datenbank-Abstraktionsschichten.

Das zurückgegebene Ergebnis kann mit bekannten DB2-Fetch-Funktionen wie db2_fetch_assoc() oder db2_fetch_array() zeilenweise ausgelesen werden. Jede Zeile enthält unter anderem die Spalten TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, KEY_SEQ (Position des Schlüssels) sowie PK_NAME (Name des Primärschlüssel-Constraints).

Für qualifier und schema kann null übergeben werden, um keine Einschränkung vorzunehmen. Auf Systemen wie IBM Db2 für z/OS kann der Qualifier genutzt werden, um auf verteilte Datenbanken zuzugreifen.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine aktive IBM Db2-Datenbankverbindung, wie sie von db2_connect() oder db2_pconnect() zurückgegeben wird.
$qualifier Pflicht string|null Ein Qualifier für Datenbanken auf IBM Db2-Systemen unter z/OS oder OS/390. Für andere Plattformen null oder einen leeren String übergeben.
$schema Pflicht string|null Das Datenbankschema, in dem die Tabelle liegt. null bedeutet, dass alle Schemata berücksichtigt werden. Der Platzhalter % als Wildcard wird unterstützt.
$table_name Pflicht string Der Name der Tabelle, deren Primärschlüssel ermittelt werden sollen. Groß-/Kleinschreibung beachten, da dies von der Datenbankkonfiguration abhängt.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine Ergebnis-Ressource zurück, die mit db2_fetch_assoc() oder ähnlichen Funktionen ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Primärschlüssel einer Tabelle ausgeben

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheimesPasswort');

if ($conn) {
    $result = db2_primary_keys($conn, null, 'DB2ADMIN', 'ORDERS');

    if ($result) {
        echo "Primärschlüssel der Tabelle ORDERS:\n";
        while ($row = db2_fetch_assoc($result)) {
            echo sprintf(
                "Spalte: %-20s | Position: %d | Constraint-Name: %s\n",
                $row['COLUMN_NAME'],
                $row['KEY_SEQ'],
                $row['PK_NAME']
            );
        }
    } else {
        echo "Fehler beim Abrufen der Primärschlüssel: " . db2_stmt_errormsg();
    }

    db2_close($conn);
} else {
    echo "Verbindungsfehler: " . db2_conn_errormsg();
}
?>
Primärschlüssel der Tabelle ORDERS: Spalte: ORDER_ID | Position: 1 | Constraint-Name: PK_ORDERS

Primärschlüssel-Infos für dynamisches ORM-Mapping ermitteln

<?php
function getPrimaryKeyColumns(resource $conn, string $schema, string $table): array {
    $keys = [];
    $result = db2_primary_keys($conn, null, $schema, $table);

    if ($result === false) {
        throw new RuntimeException(
            'db2_primary_keys fehlgeschlagen: ' . db2_stmt_errormsg()
        );
    }

    while ($row = db2_fetch_assoc($result)) {
        $keys[$row['KEY_SEQ']] = $row['COLUMN_NAME'];
    }

    ksort($keys);
    return array_values($keys);
}

$conn = db2_connect('SAMPLE', 'db2user', 'geheimesPasswort');
$pkColumns = getPrimaryKeyColumns($conn, 'DB2ADMIN', 'ORDER_ITEMS');

echo "PK-Spalten: " . implode(', ', $pkColumns) . "\n";
db2_close($conn);
?>
PK-Spalten: ORDER_ID, ITEM_ID

// Wichtig · Fallstricke

Verfügbarkeit: db2_primary_keys() ist nur verfügbar, wenn die ibm_db2-PHP-Erweiterung installiert und aktiviert ist. Sie ist nicht Teil von PDO oder anderen Datenbankabstraktionen.

Groß-/Kleinschreibung: IBM Db2 speichert Schema- und Tabellennamen standardmäßig in Großbuchstaben. Werden Kleinbuchstaben übergeben, kann die Funktion ein leeres Ergebnis liefern, ohne einen Fehler zu werfen. Daher empfiehlt sich der Einsatz von strtoupper() auf den Parametern.

Fehlerbehandlung: Bei einem Rückgabewert von false liefern db2_stmt_errormsg() und db2_stmt_error() nähere Informationen zur Fehlerursache.