Start · Sprachen · PHP · Referenz · db2_foreign_keys

db2_foreign_keys

Funktion

Gibt ein Ergebnis-Ressource zurück, das die Fremdschlüssel-Informationen einer angegebenen Tabelle enthält.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_foreign_keys(resource $connection, string|null $qualifier, string|null $schema, string $table_name): resource|false

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

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine Ergebnis-Ressource zurück, die mit den Fetch-Funktionen der 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();
}
?>
FK-Spalte: customer_id Referenz-Tabelle: customers Referenz-Spalte: id --- FK-Spalte: product_id Referenz-Tabelle: products Referenz-Spalte: id ---

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.