Signatur
Beschreibung
db2_foreign_keys() fragt die Metadaten einer Datenbank ab und liefert eine Ergebnis-Ressource mit allen Fremdschlüsseln, die in der angegebenen Tabelle definiert sind. Jede Zeile des Ergebnisses beschreibt eine Fremdschlüssel-Beziehung zwischen einer Spalte der Quelltabelle und der referenzierten Primärschlüsselspalte einer anderen Tabelle.
Die Funktion ist Teil der IBM DB2-, Cloudscape- und Apache Derby-Erweiterung (ibm_db2). Sie eignet sich besonders gut für Introspektions-Aufgaben, etwa beim Aufbau von Datenbank-Dokumentations-Werkzeugen, Migrations-Skripten oder ORM-Implementierungen, die Tabellenbeziehungen automatisch auflösen müssen.
Das zurückgegebene Ergebnis kann mit den Standard-Fetch-Funktionen wie db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object() verarbeitet werden. Die wichtigsten zurückgegebenen Spalten sind u. a. PKTABLE_NAME (referenzierte Tabelle), PKCOLUMN_NAME (referenzierte Spalte), FKTABLE_NAME (Fremdschlüssel-Tabelle) und FKCOLUMN_NAME (Fremdschlüssel-Spalte).
Für Parameter, die nicht relevant sind oder nicht gefiltert werden sollen, kann null übergeben werden, was einem Platzhalter entspricht und alle verfügbaren Werte einschließt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine aktive IBM DB2-Datenbankverbindung, die über db2_connect() oder db2_pconnect() erstellt wurde. |
|
| $qualifier Pflicht | string|null | Der Qualifier für DB2-Datenbanken auf OS/390- oder z/OS-Systemen. Für andere Datenbanken null oder einen leeren String übergeben. |
|
| $schema Pflicht | string|null | Das Datenbankschema, das die Tabelle enthält. Bei null werden alle Schemas durchsucht. Wildcards (%) sind erlaubt. |
|
| $table_name Pflicht | string | Der Name der Tabelle, deren Fremdschlüssel abgerufen werden sollen. Wildcards (%) sind erlaubt. |
Rückgabewert
ibm_db2-Erweiterung verarbeitet werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Fremdschlüssel einer Tabelle auflisten
<?php
$conn = db2_connect('DATABASE', 'user', 'password');
if ($conn) {
$result = db2_foreign_keys($conn, null, 'PUBLIC', 'orders');
if ($result) {
while ($row = db2_fetch_assoc($result)) {
echo 'FK-Spalte: ' . $row['FKCOLUMN_NAME'] . PHP_EOL;
echo 'Referenz-Tabelle: ' . $row['PKTABLE_NAME'] . PHP_EOL;
echo 'Referenz-Spalte: ' . $row['PKCOLUMN_NAME'] . PHP_EOL;
echo '---' . PHP_EOL;
}
} else {
echo 'Fehler beim Abrufen der Fremdschlüssel.';
}
db2_close($conn);
} else {
echo 'Verbindungsfehler: ' . db2_conn_errormsg();
}
?>
Tabellenbeziehungen für alle Schemas dokumentieren
<?php
$conn = db2_connect('DATABASE', 'user', 'password');
if ($conn) {
// null als Schema = alle Schemas durchsuchen
$result = db2_foreign_keys($conn, null, null, 'order_items');
$relations = [];
if ($result) {
while ($row = db2_fetch_object($result)) {
$relations[] = [
'schema' => $row->FKTABLE_SCHEM,
'fk_col' => $row->FKCOLUMN_NAME,
'pk_table' => $row->PKTABLE_NAME,
'pk_col' => $row->PKCOLUMN_NAME,
'update_rule' => $row->UPDATE_RULE,
'delete_rule' => $row->DELETE_RULE,
];
}
print_r($relations);
}
db2_close($conn);
}
?>
// Wichtig · Fallstricke
Erweiterung erforderlich: db2_foreign_keys() gehört zur ibm_db2-Erweiterung, die separat installiert und aktiviert werden muss. Sie ist nicht Teil der Standard-PHP-Distribution.
Spalten im Ergebnis: Die zurückgegebenen Spalten orientieren sich am ODBC/CLI-Standard. Relevante Spalten sind u. a.: PKTABLE_CAT, PKTABLE_SCHEM, PKTABLE_NAME, PKCOLUMN_NAME, FKTABLE_NAME, FKCOLUMN_NAME, KEY_SEQ, UPDATE_RULE und DELETE_RULE.
Performance: Bei großen Datenbanken mit vielen Tabellen und Schemas kann die Abfrage ohne eingeschränktes Schema langsam sein. Es empfiehlt sich, den schema-Parameter möglichst konkret zu setzen.