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