Start · Sprachen · PHP · Referenz · odbc_specialcolumns

odbc_specialcolumns

Funktion

Ruft spezielle Spalten einer Tabelle über eine ODBC-Verbindung ab, z. B. den optimalen Primärschlüssel oder Spalten, die sich bei einer Zeilenaktualisierung automatisch ändern.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_specialcolumns(resource $odbc, int $type, string $catalog, string $schema, string $table, int $scope, int $nullable): resource|false

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

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine ODBC-Ergebnis-Ressource zurück, die mit 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);
?>
Spezielle Spalten der Tabelle 'customers': Spalte: customer_id, Typ: int, Scope: 2

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);
?>
Automatisch aktualisierte Spalten der Tabelle 'orders': Spalte: row_version, Typ: timestamp

// 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.