PHP/Informationen über die Datenbank

Aus Mikiwiki
< PHP
Zur Navigation springen Zur Suche springen

Feldinformationen

Folgende Funktionen liefern Informationen über die Felder der Ergebnisliste.

Funktion Beschreibung
mysql_fetch_fields Gibt ein Objekt zurück, dessen Eigenschaften die des Feldes darstellen. "$result" ist dabei das Ergebnislistenhandle, der optionale Parameter "$offset" bestimmt das Feld innerhalb des aktuellen Datensatzes, über das Informationen geholt werden.
$fieldobject = mysql_fetch_fields($result, [$offset])
Objekteigenschaft Beschreibung
$fieldobject->name Der Spaltenname.
$fieldobject->table Der Name der zugehörigen Tabelle.
$fieldobject->max_length Die maximale Länge der Spalte.
$fieldobject->not_null Gibt "1" ("TRUE") zurück, wenn "NULL" nicht erlaubt ist.
$fieldobject->primary_key Gibt "1" ("TRUE") zurück, wenn das Feld einen Primärschlüssel hat.
$fieldobject->unique_key Gibt "1" ("TRUE") zurück, wenn das Feld "UNIQUE" (eindeutig) ist.
$fieldobject->multiple_key Gibt "1" ("TRUE") zurück, wenn das Feld nicht "UNIQUE" (eindeutig) ist.
$fieldobject->numeric Gibt "1" ("TRUE") zurück, wenn das Feld einen numerischen Datentyp hat.
$fieldobject->blob Gibt "1" ("TRUE") zurück, wenn das Feld ein "BLOB"-Feld ist.
$fieldobject->type Gibt den Datentyp zurück. Der Rückgabewert ist eine Zeichenkette mit dem Namen, z. B. "blob" oder "int".
$fieldobject->unsigned Gibt "1" ("TRUE") zurück, wenn das Feld keine Vorzeichen zulässt.
$fieldobject->zerofill Gibt "1" ("TRUE") zurück, wenn das Feld standardmässig "0" enthält.

Achtung: Mit diesen Objekteigenschaften werden die definierten Eigenschaften des feldes ermittelt und nicht der tatsächliche oder vermeintliche Zustand . Beispielsweise ist "$fieldobject->unsigned" also "1", wenn das Feld negative Zahlen zulässt; es spielt keine Rolle, ob auch tatsächlich eine negative Zahl darin enthalten ist.

mysql_fetch_length Gibt ein Array zurück, das Elemente für jede Saplte der Ergebnisliste enthält. Jedes Element stellt dabei die Länge der Spalte in Byte dar. Damit lässt sich der Platzverbrauch oder die Nutzung von Variablen berechnen. Die Funktion kann nur verwendet werden, wenn vorher eine Ergebnisliste erstellt und mit "mysql_fetch_row" ausgelesen wurde.
mysql_field_seek Setzt den internen Feldzeiger auf ein bestimmtes Feld. Wird dann "mysql_fetch_fields" ohne den optionalen Parameter "$offset" verwendet, so gilt die mit "mysql_field_seek" ausgewählte Spalte.
$ok = mysql_field_seek($result, $offset);
mysql_field_name Gibt nur den Namen eines Feldes zurück.
mysql_field_len Gibt nur die Spaltenbreite (Anzahl der für die Ausgabe maximal benötigten Zeichen) eines Feldes zurück.
mysql_field_type Gibt nur den Datentyp eines Feldes zurück.
mysql_field_flag Gibt nur die zusätzlichen Eigenschaften eines Feldes zurück. Die Flags selbst sind Eigenschaften gemäss folgender Tabelle.
Feld Beschreibung
not_null Spalte akzeptiert keine Nullen.
primary_key Spalte ist ein Primärschlüssel
unique_key Spalte akzeptiert nur eindeutige Werte.
multiple_key Spalte akzeptiert auch mehrdeutige Werte.
blob Spalte ist vom Datentyp "BLOB".
unsigned Spalte akzeptiert Zahlen mit Vorzeichen.
zerofill Spalte ist standardmässig "0".
binary Spalte akzeptiert Binärtypen.
enum Spalte ist ein Aufzählungstyp.
auto_increment Spalte verfügt über die Funktion "auto increment".
timestamp Spalte enthält einen Zeitstempel.

Die Ergebnisliste kann mit der Funktion "explode" in ein Array umgewandelt werden, sodass gezielt einzelne Werte extrahiert werden könne.

$flags = mysql_field_flags ($result, $i);
$flag  = explode(" ", $flags);
echo $flag[1] . "<br />\n";

Das folgende Skript "mysql_fieldinfo.php" zeigt einige dieser Funktionen im Einsatz.

<?php
## Name     mysql_fieldinfo.php

include("open.inc.php");
$result = mysql_query("SELECT * FROM address");
$fields = mysql_num_fields($result);
$rows   = mysql_num_rows($result);
$i = 0;
$table = mysql_field_table($result, $i);
echo "<p>Die Tabelle \"$table\" hat <b>$fields</b> Felder und ";
echo "<b>$rows</b> Datensätze.</p>\n";
echo "<p>Die Tabelle hat folgende Felder:</p>\n<p>"; 
while ($i < $fields) 
{
    $type  = mysql_field_type  ($result, $i);
    $name  = mysql_field_name  ($result, $i);
    $len   = mysql_field_len   ($result, $i);
    $flags = mysql_field_flags ($result, $i);
    echo "[" . $type . "] " . $name . " (" . $len . ") " . $flags . "<br />\n";
    ## Extraktion einzelner Werte
    #$flag  = explode(" ", $flags);
    #echo $flag[1] . "<br />\n";
    $i++;
}
echo "</p>\n";
mysql_close($connection);
?>

Die Tabelle "address" hat 10 Felder und 14 Datensätze.

Die Tabelle hat folgende Felder:

[int] custID (21) not_null primary_key auto_increment
[string] fname (50)
[string] sname (50)
[string] company (80)
[string] street (80)
[string] zip (6)
[string] city (40)
[string] telephone (40)
[string] telefax (40)
[string] email (50)

Tabellen- und Datenbankeigenschaften

Folgende Funktionen liefern Informationen über Datenbanken und Tabellen.

Funktion Beschreibung
mysql_field_table Gibt den Namen der Tabelle zu einem bekannten Feldnamen zurück. Diese Funktion ist nützlich, wenn in einer "SELECT"-Anweisung mit Aliasen und mehreren Tabellen gearbeitet wird und man nicht mehr weiss, aus welcher Tabelle die Daten stammen.
$i = 0;
$table = mysql_field_table($result, $i);
mysql_list_tables Ermittelt die Namen der Tabellen einer Datenbank.
mysql_tablename Gibt eine Namensliste zurück.
mysql_list_dbs Ermittelt die Namen der Datenbanken.

Das folgende Skript "mysql_tablenames.php" gibt eine Liste aller Tabellennamen der aktuellen Datenbank aus.

<?php
## Name     mysql_tablenames.php

include("open.inc.php");
$result = mysql_list_tables($database);
$i      = 0;
echo "<p>Tabellen in <b>$database</b>:</p>\n";
echo "<p>";
while ($i < mysql_num_rows($result)) 
{
  $tablenames[$i] = mysql_tablename($result, $i);
  echo $tablenames[$i] . "<br />\n";
  $i++;
}
echo "</p>\n";
mysql_close($connection);
?>

Das folgende Skript "mysql_listdbs.php" gibt eine Liste aller Datenbanken auf dem aktuellen MySQL-Server aus.

<?php
## Name     mysql_listdbs.php

include("open.inc.php");
$result = mysql_list_dbs($connection);
$i      = 0;
echo "<p>Datenbanken auf <b>$server</b>:</p>\n";
echo "<p>";
while ($i < mysql_num_rows($result)) 
{
  $tablenames[$i] = mysql_tablename($result, $i);
  echo $tablenames[$i] . "<br />\n";
  $i++;
}
echo "</p>\n";
mysql_close($connection);
?>