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