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