Signatur
Beschreibung
db2_special_columns() gibt Informationen über Spalten zurück, die eine Zeile in einer Tabelle eindeutig identifizieren. Typischerweise sind dies Primärschlüssel oder andere eindeutige Bezeichner, die dazu genutzt werden können, eine bestimmte Zeile schnell wiederzufinden oder zu aktualisieren.
Die Funktion gibt eine Ergebnis-Ressource zurück, die anschließend mit Funktionen wie db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object() ausgelesen werden kann. Jede zurückgegebene Zeile beschreibt eine solche Identifizierungsspalte mit Metadaten wie Spaltenname, Datentyp, Länge und Skalierung.
Der Parameter scope steuert, für welchen Nutzungsrahmen die Informationen gelten sollen: entweder nur für die aktuelle Transaktion (SQL_SCOPE_CURROW = 0) oder für die gesamte Sitzung (SQL_SCOPE_TRANSACTION = 1). Diese Funktion ist besonders nützlich beim Aufbau generischer Datenbankabstraktionsschichten oder bei der Introspektierung von Tabellenstrukturen.
Wenn die Funktion keine Spalten findet oder ein Fehler auftritt, gibt sie false zurück. Es empfiehlt sich daher, das Ergebnis stets auf false zu prüfen, bevor es weiterverarbeitet wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine aktive IBM DB2-Verbindungs-Ressource, die zuvor mit db2_connect() oder db2_pconnect() erstellt wurde. |
|
| $qualifier Pflicht | string|null | Ein Qualifier für DB2-Datenbanken unter OS/390 oder z/OS. Bei anderen Plattformen null oder einen leeren String übergeben. |
|
| $schema Pflicht | string | Das Schema, in dem die Tabelle liegt. Ein leerer String durchsucht alle Schemas. Wildcards wie % werden unterstützt. |
|
| $table_name Pflicht | string | Der Name der Tabelle, deren eindeutige Zeilenkennungsspalten abgefragt werden sollen. | |
| $scope Pflicht | int | Gibt den minimalen Gültigkeitsbereich der ROWID an. Mögliche Werte: 0 (SQL_SCOPE_CURROW) für die aktuelle Zeile, 1 (SQL_SCOPE_TRANSACTION) für die aktuelle Transaktion, 2 (SQL_SCOPE_SESSION) für die gesamte Sitzung. |
Rückgabewert
db2_fetch_assoc() oder ähnlichen Funktionen ausgelesen werden kann. Im Fehlerfall oder wenn keine passenden Spalten gefunden wurden, wird false zurückgegeben.Beispiele
Eindeutige Zeilenkennungsspalten einer Tabelle auflisten
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheimesPasswort');
if ($conn) {
// Scope 1 = SQL_SCOPE_TRANSACTION
$result = db2_special_columns($conn, null, 'DB2ADMIN', 'EMPLOYEES', 1);
if ($result === false) {
echo 'Fehler: ' . db2_stmt_errormsg();
} else {
while ($row = db2_fetch_assoc($result)) {
echo 'Spalte: ' . $row['COLUMN_NAME'] . PHP_EOL;
echo 'Typ: ' . $row['TYPE_NAME'] . PHP_EOL;
echo 'Länge: ' . $row['COLUMN_SIZE'] . PHP_EOL;
echo '---' . PHP_EOL;
}
}
db2_close($conn);
} else {
echo 'Verbindung fehlgeschlagen: ' . db2_conn_errormsg();
}
?>
Prüfung ob eine Tabelle eine ROWID-Spalte besitzt
<?php
$conn = db2_pconnect('SAMPLE', 'db2user', 'geheimesPasswort');
if ($conn) {
$result = db2_special_columns($conn, null, 'DB2ADMIN', 'ORDERS', 0);
$found = false;
if ($result !== false) {
while ($row = db2_fetch_assoc($result)) {
if (!empty($row['COLUMN_NAME'])) {
$found = true;
break;
}
}
}
echo $found
? 'Tabelle besitzt eine eindeutige Zeilenkennungsspalte.'
: 'Keine eindeutige Zeilenkennungsspalte gefunden.';
}
?>
// Wichtig · Fallstricke
Verfügbarkeit: db2_special_columns() ist nur verfügbar, wenn die ibm_db2-Erweiterung installiert und aktiviert ist. Diese ist standardmäßig nicht in PHP enthalten.
Spalten im Ergebnis: Die zurückgegebene Ergebnis-Ressource enthält typischerweise folgende Felder: SCOPE, COLUMN_NAME, DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH, DECIMAL_DIGITS und PSEUDO_COLUMN.
Groß-/Kleinschreibung: Schema- und Tabellennamen sind auf manchen DB2-Systemen case-sensitiv. Im Zweifel Großbuchstaben verwenden, da DB2 Bezeichner intern häufig in Großschreibung speichert.