Signatur
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
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);
?>
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);
?>
// 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.