Start · Sprachen · PHP · Referenz · odbc_statistics

odbc_statistics

Funktion

Ruft Statistiken zu einer Tabelle sowie zu den Indizes einer Tabelle über eine ODBC-Verbindung ab.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_statistics(resource $odbc, string $catalog, string $schema, string $table_name, int $unique, int $accuracy): resource|false

Beschreibung

odbc_statistics fragt über eine bestehende ODBC-Verbindung die Statistiken zu einer angegebenen Tabelle ab. Die zurückgegebene Ressource enthält Informationen über die Tabelle selbst sowie über ihre Indizes, vergleichbar mit dem SQLStatistics-Aufruf der ODBC-API.

Das Ergebnis-Set kann mit den üblichen ODBC-Fetch-Funktionen wie odbc_fetch_row oder odbc_result verarbeitet werden. Typische Spalten im Ergebnis sind u.a. TABLE_CAT, TABLE_SCHEM, TABLE_NAME, NON_UNIQUE, INDEX_NAME, TYPE, ORDINAL_POSITION, COLUMN_NAME, CARDINALITY und PAGES.

Die Funktion ist besonders nützlich, um vorhandene Indizes auf einer Tabelle zu untersuchen, Eindeutigkeitsconstraints zu verifizieren oder die Datenbankstruktur zur Laufzeit introspektiv auszuwerten, ohne datenbankspezifische SQL-Abfragen zu verwenden.

Beachte, dass die tatsächliche Verfügbarkeit und Vollständigkeit der zurückgelieferten Informationen vom jeweiligen ODBC-Treiber abhängt und zwischen Datenbankanbietern variieren kann.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine gültige ODBC-Verbindungsressource, die zuvor mit odbc_connect oder odbc_pconnect erzeugt wurde.
$catalog Pflicht string Der Name des Katalogs (Datenbank) im Sinne der ODBC-API. Für viele Treiber kann hier ein leerer String '' oder null übergeben werden, um den Standard-Katalog zu verwenden.
$schema Pflicht string Das Schema (z. B. Besitzer/Owner) der Tabelle. Bei vielen Datenbanken kann ein leerer String '' übergeben werden, um kein Schema zu filtern.
$table_name Pflicht string Der Name der Tabelle, für die Statistiken abgerufen werden sollen.
$unique Pflicht int Gibt an, ob nur eindeutige Indizes zurückgegeben werden sollen. Erlaubte Werte sind SQL_INDEX_UNIQUE (0) für ausschließlich eindeutige Indizes oder SQL_INDEX_ALL (1) für alle Indizes.
$accuracy Pflicht int Gibt an, ob Kardinalität und Seitenanzahl aktuell sein müssen. Mögliche Werte: SQL_ENSURE (1) fordert aktuelle Werte an, SQL_QUICK (0) erlaubt gecachte Werte.

Rückgabewert

Typ
resource|false
Beschreibung
Bei Erfolg wird eine ODBC-Ergebnis-Ressource zurückgegeben, die mit odbc_fetch_row, odbc_result o. Ä. ausgelesen werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Alle Indizes einer Tabelle auflisten

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// SQL_INDEX_ALL = 1, SQL_QUICK = 0
$result = odbc_statistics($conn, '', '', 'kunden', 1, 0);

if ($result === false) {
    die('Statistiken konnten nicht abgerufen werden.');
}

while (odbc_fetch_row($result)) {
    $indexName  = odbc_result($result, 'INDEX_NAME');
    $columnName = odbc_result($result, 'COLUMN_NAME');
    $nonUnique  = odbc_result($result, 'NON_UNIQUE');
    $type       = odbc_result($result, 'TYPE');
    echo "Index: $indexName | Spalte: $columnName | Nicht-eindeutig: $nonUnique | Typ: $type\n";
}

odbc_free_result($result);
odbc_close($conn);
?>
Index: PRIMARY | Spalte: kunden_id | Nicht-eindeutig: 0 | Typ: 3 Index: idx_name | Spalte: nachname | Nicht-eindeutig: 1 | Typ: 3

Nur eindeutige Indizes mit aktuellen Statistiken abrufen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');

if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// SQL_INDEX_UNIQUE = 0, SQL_ENSURE = 1
$result = odbc_statistics($conn, '', 'dbo', 'bestellungen', 0, 1);

if ($result === false) {
    echo 'Keine Statistiken verfügbar oder Fehler aufgetreten.';
} else {
    echo "Eindeutige Indizes auf Tabelle 'bestellungen':\n";
    while (odbc_fetch_row($result)) {
        $indexName   = odbc_result($result, 'INDEX_NAME');
        $cardinality = odbc_result($result, 'CARDINALITY');
        $pages       = odbc_result($result, 'PAGES');
        echo " - $indexName (Kardinalität: $cardinality, Seiten: $pages)\n";
    }
    odbc_free_result($result);
}

odbc_close($conn);
?>
Eindeutige Indizes auf Tabelle 'bestellungen': - PRIMARY (Kardinalität: 10420, Seiten: 32)

// Wichtig · Fallstricke

Treiberabhängigkeit: Die tatsächlich zurückgelieferten Spalten und deren Inhalt hängen stark vom verwendeten ODBC-Treiber und dem dahinterliegenden Datenbanksystem ab. Nicht alle Treiber unterstützen alle Felder vollständig.

Konstanten: PHP definiert möglicherweise nicht alle ODBC-Konstanten wie SQL_INDEX_UNIQUE oder SQL_ENSURE vordefiniert. In solchen Fällen müssen die numerischen Werte direkt verwendet werden (0 bzw. 1).

Ressourcen freigeben: Das zurückgegebene Ergebnis-Handle sollte nach der Verwendung mit odbc_free_result freigegeben werden, um Speicher nicht unnötig zu belegen.