Signatur
Beschreibung
odbc_specialcolumns() fragt über ODBC die speziellen Spalten einer Tabelle ab. Je nach $type-Parameter werden entweder die optimalen Spalten zur eindeutigen Zeilenidentifikation (SQL_BEST_ROWID) oder die Spalten zurückgegeben, die automatisch aktualisiert werden, wenn ein Wert in einer Zeile geändert wird (SQL_ROWVER). Die Funktion entspricht dem ODBC-Standard-API-Aufruf SQLSpecialColumns.
Das Ergebnis ist ein ODBC-Ergebnis-Handle, das mit den üblichen ODBC-Funktionen wie odbc_fetch_row() und odbc_result() ausgewertet werden kann. Die zurückgegebenen Ergebnisspalten enthalten typischerweise SCOPE, COLUMN_NAME, DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH, DECIMAL_DIGITS und PSEUDO_COLUMN.
Diese Funktion ist besonders nützlich, wenn man bei einem generischen Datenbankzugriff über ODBC nicht im Voraus weiß, welche Spalten eine Tabelle zur eindeutigen Zeilenidentifikation verwendet. So kann man dynamisch die richtigen Schlüsselspalten ermitteln, ohne das Datenbankschema fest im Code zu verankern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $odbc Pflicht | resource | Die ODBC-Verbindungsressource, die zuvor mit odbc_connect() oder odbc_pconnect() erzeugt wurde. |
|
| $type Pflicht | int | Der Typ der abzurufenden Spalten. SQL_BEST_ROWID (1) liefert die optimalen Spalten zur eindeutigen Zeilenidentifikation; SQL_ROWVER (2) liefert Spalten, die bei einer Zeilenänderung automatisch aktualisiert werden. |
|
| $catalog Pflicht | string | Der Katalogname (Datenbankname) der Tabelle. Ein leerer String '' sucht in Tabellen ohne Katalog. |
|
| $schema Pflicht | string | Der Schemaname (z. B. Datenbankbenutzer). Ein leerer String '' sucht in Tabellen ohne Schema. Kann Platzhalter wie % enthalten. |
|
| $table Pflicht | string | Der Name der Tabelle, für die spezielle Spalten abgerufen werden sollen. | |
| $scope Pflicht | int | Definiert den minimalen Gültigkeitsbereich der zurückgegebenen ROWID. Mögliche Werte: SQL_SCOPE_CURROW (0), SQL_SCOPE_TRANSACTION (1) oder SQL_SCOPE_SESSION (2). |
|
| $nullable Pflicht | int | Legt fest, ob Spalten, die NULL-Werte akzeptieren, zurückgegeben werden sollen. SQL_NO_NULLS (0) schließt nullable Spalten aus; SQL_NULLABLE (1) schließt sie ein. |
Rückgabewert
odbc_fetch_row(), odbc_result() usw. verarbeitet werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Beste Zeilenidentifikationsspalten einer Tabelle abrufen
<?php
$conn = odbc_connect('myDSN', 'user', 'password');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
// SQL_BEST_ROWID = 1, SQL_SCOPE_SESSION = 2, SQL_NULLABLE = 1
$result = odbc_specialcolumns($conn, 1, '', 'dbo', 'customers', 2, 1);
if ($result === false) {
die('Fehler beim Abrufen der Sonderspalten: ' . odbc_errormsg($conn));
}
echo "Spezielle Spalten der Tabelle 'customers':\n";
while (odbc_fetch_row($result)) {
$columnName = odbc_result($result, 'COLUMN_NAME');
$typeName = odbc_result($result, 'TYPE_NAME');
$scope = odbc_result($result, 'SCOPE');
echo " Spalte: $columnName, Typ: $typeName, Scope: $scope\n";
}
odbc_free_result($result);
odbc_close($conn);
?>
Automatisch aktualisierte Spalten ermitteln (SQL_ROWVER)
<?php
$conn = odbc_connect('myDSN', 'user', 'password');
if (!$conn) {
die('Verbindung fehlgeschlagen');
}
// SQL_ROWVER = 2, SQL_SCOPE_TRANSACTION = 1, SQL_NO_NULLS = 0
$result = odbc_specialcolumns($conn, 2, '', 'dbo', 'orders', 1, 0);
if ($result === false) {
echo 'Keine automatisch aktualisierten Spalten gefunden oder Fehler: ' . odbc_errormsg($conn);
} else {
echo "Automatisch aktualisierte Spalten der Tabelle 'orders':\n";
while (odbc_fetch_row($result)) {
$columnName = odbc_result($result, 'COLUMN_NAME');
$typeName = odbc_result($result, 'TYPE_NAME');
echo " Spalte: $columnName, Typ: $typeName\n";
}
odbc_free_result($result);
}
odbc_close($conn);
?>
// Wichtig · Fallstricke
Treiberabhängigkeit: Die Verfügbarkeit und das Verhalten von odbc_specialcolumns() hängen stark vom verwendeten ODBC-Treiber ab. Nicht alle Treiber unterstützen SQL_ROWVER vollständig oder liefern sinnvolle Ergebnisse für alle Parameter-Kombinationen.
Konstanten: Die Integer-Werte für $type, $scope und $nullable können als PHP-ODBC-Konstanten angegeben werden, sofern diese definiert sind. Prüfe mit defined('SQL_BEST_ROWID'), ob die Konstanten in deiner Umgebung verfügbar sind.
Ressourcen freigeben: Das zurückgegebene Ergebnis-Handle sollte nach der Verwendung mit odbc_free_result() freigegeben werden, um Speicher zu sparen.