Start · Sprachen · PHP · Referenz · odbc_foreignkeys

odbc_foreignkeys

Funktion

Ruft eine Liste von Fremdschlüssel-Beziehungen zwischen Tabellen aus einer ODBC-Datenquelle ab.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_foreignkeys(resource $odbc, string $pk_catalog, string $pk_schema, string $pk_table, string $fk_catalog, string $fk_schema, string $fk_table): resource|false

Beschreibung

odbc_foreignkeys() gibt Informationen über Fremdschlüssel zurück, die entweder von einer angegebenen Primärschlüsseltabelle referenziert werden oder die in einer bestimmten Fremdschlüsseltabelle definiert sind. Die Funktion entspricht dem ODBC-API-Aufruf SQLForeignKeys und ist somit von der jeweiligen ODBC-Treiberimplementierung abhängig.

Werden sowohl pk_table als auch fk_table angegeben, gibt die Funktion die Fremdschlüssel der Fremdschlüsseltabelle zurück, die auf den Primärschlüssel der Primärschlüsseltabelle verweisen. Wird nur pk_table gesetzt und fk_table leer gelassen, werden alle Tabellen aufgelistet, die Fremdschlüssel auf die angegebene Primärschlüsseltabelle enthalten. Umgekehrt liefert nur ein gesetzter fk_table-Wert alle Fremdschlüssel der genannten Tabelle.

Das Ergebnis ist ein ODBC-Ergebnis-Ressource, die mit Funktionen wie odbc_fetch_row() oder odbc_result() weiterverarbeitet werden kann. Die Ergebnismenge enthält typischerweise Spalten wie PKTABLE_NAME, PKCOLUMN_NAME, FKTABLE_NAME, FKCOLUMN_NAME, KEY_SEQ, UPDATE_RULE, DELETE_RULE, FK_NAME und PK_NAME.

Diese Funktion eignet sich besonders für Datenbankwerkzeuge, Migrations-Skripte oder Dokumentations-Generatoren, die die referenzielle Integrität einer Datenbank analysieren oder darstellen müssen.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine gültige ODBC-Verbindungsressource, die mit odbc_connect() oder odbc_pconnect() erzeugt wurde.
$pk_catalog Pflicht string Der Katalogname (Datenbankname) der Primärschlüsseltabelle. Ein leerer String '' bedeutet, dass kein Katalog angegeben wird.
$pk_schema Pflicht string Der Schemaname der Primärschlüsseltabelle. Ein leerer String '' bedeutet, dass kein Schema angegeben wird.
$pk_table Pflicht string Der Name der Tabelle, deren Primärschlüssel als Referenz gesucht wird. Leer lassen, wenn nur Fremdschlüssel einer Fremdschlüsseltabelle gesucht werden.
$fk_catalog Pflicht string Der Katalogname (Datenbankname) der Fremdschlüsseltabelle. Ein leerer String '' bedeutet, dass kein Katalog angegeben wird.
$fk_schema Pflicht string Der Schemaname der Fremdschlüsseltabelle. Ein leerer String '' bedeutet, dass kein Schema angegeben wird.
$fk_table Pflicht string Der Name der Tabelle, deren Fremdschlüssel abgerufen werden sollen. Leer lassen, wenn nur Verweise auf eine Primärschlüsseltabelle gesucht werden.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine ODBC-Ergebnis-Ressource zurück, die mit odbc_fetch_row() und odbc_result() ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Alle Fremdschlüssel einer bestimmten Tabelle abrufen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

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

// Alle Fremdschlüssel der Tabelle 'bestellungen' abrufen
$result = odbc_foreignkeys($conn, '', '', '', '', '', 'bestellungen');

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

while (odbc_fetch_row($result)) {
    $pkTabelle   = odbc_result($result, 'PKTABLE_NAME');
    $pkSpalte    = odbc_result($result, 'PKCOLUMN_NAME');
    $fkTabelle   = odbc_result($result, 'FKTABLE_NAME');
    $fkSpalte    = odbc_result($result, 'FKCOLUMN_NAME');
    $fkName      = odbc_result($result, 'FK_NAME');

    echo "Fremdschlüssel '{$fkName}': {$fkTabelle}.{$fkSpalte} -> {$pkTabelle}.{$pkSpalte}\n";
}

odbc_free_result($result);
odbc_close($conn);
?>
Fremdschlüssel 'fk_bestellungen_kunde_id': bestellungen.kunde_id -> kunden.id Fremdschlüssel 'fk_bestellungen_produkt_id': bestellungen.produkt_id -> produkte.id

Alle Tabellen abrufen, die auf eine bestimmte Primärschlüsseltabelle verweisen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

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

// Alle Tabellen finden, die einen Fremdschlüssel auf 'kunden' haben
$result = odbc_foreignkeys($conn, '', '', 'kunden', '', '', '');

if ($result === false) {
    die('Fehler: ' . odbc_errormsg($conn));
}

echo "Tabellen mit Fremdschlüssel auf 'kunden':\n";
while (odbc_fetch_row($result)) {
    $fkTabelle = odbc_result($result, 'FKTABLE_NAME');
    $fkSpalte  = odbc_result($result, 'FKCOLUMN_NAME');
    $pkSpalte  = odbc_result($result, 'PKCOLUMN_NAME');
    $loeschRegel = odbc_result($result, 'DELETE_RULE');

    $regelText = match((int)$loeschRegel) {
        0 => 'CASCADE',
        1 => 'RESTRICT',
        2 => 'SET NULL',
        default => 'UNBEKANNT'
    };

    echo "  {$fkTabelle}.{$fkSpalte} -> kunden.{$pkSpalte} (DELETE: {$regelText})\n";
}

odbc_free_result($result);
odbc_close($conn);
?>
Tabellen mit Fremdschlüssel auf 'kunden': bestellungen.kunde_id -> kunden.id (DELETE: RESTRICT) adressen.kunden_id -> kunden.id (DELETE: CASCADE)

// Wichtig · Fallstricke

Treiberabhängigkeit: Das Verhalten und die Verfügbarkeit von Spalten in der Ergebnismenge hängen stark vom eingesetzten ODBC-Treiber ab. Nicht alle Treiber unterstützen alle Spalten der ODBC-SQLForeignKeys-Spezifikation vollständig. Testen Sie das Ergebnis immer mit dem konkreten Datenbanksystem.

Leere Parameter: Es ist wichtig, zwischen einem leeren String '' (kein Filter) und NULL zu unterscheiden. In PHP werden alle Parameter als Strings übergeben; das Verhalten bei NULL-ähnlichen Werten ist treiberabhängig. Für maximale Kompatibilität sollten leere Strings verwendet werden.

Ressource-Verwaltung: Die zurückgegebene Ergebnis-Ressource sollte nach der Verwendung stets mit odbc_free_result() freigegeben werden, um Speicherlecks zu vermeiden.