Hello,
ich arbeite gerade an einem kleinen MySQL-Tool, bei dem man sich die Datenbanken eines MySQL-Servers anschauen kann, die dazugehörigen Tabellen und die dazugehörigen Felder.
Da sollten wir uns zusammentun. Ich bin auch gerade dabei...
Hier mein Einstand:
//---- Funktion zur Ermittlung der Metadaten einer Tabelle -----
function get_info($con,$table)
{
if (!$con) return false;
if (strlen($table) == 0) return false;
$sql = "show columns from $table";
$res = mysql_query($sql,$con);
if (!$res) return false;
$info = array();
while ($rec = mysql_fetch_assoc($res))
{
$field=$rec["Field"];
unset($rec["Field"]);
$info["$field"]=$rec;
}
return $info;
}
returns:
fieldname["Type"]
# ["Null"]
# ["Key"]
# ["Default"]
# ["Extra"]
//---------------------------------------------------------------
Sinn der Funktion ist es, ein Array mit den Metadaten der Spalten eine Tabelle zu erhalten, dass als Index den Spaltennamen hat.
Man kann dann später z.B. einer Anzeigefunktion einfach die vermeintlichen Feldnamen übergeben, die man sehen will. Die Anzeigefunktion prüft dann, ob diese vorhanden sind und stellt sie typgerecht dar. Dazu muss natürlich für jeden Datentyp eine Anzeigemethode vorhanden sein.
Typen sind zur Zeit:
tinyint
smallint
mediumint
int
bigint
float
double
decimal
date
datetime
timestamp
time
year
char
varchar
tinyblob
tinytext
text
blob
mediumblob
mediumtext
longblob
longtext
enum
set
Du siehst also, es ist viel zu tun.
MySQL kennt keine logischen Felder. Allerdings lassen sich die String-Untertypen ENUM (eins aus 65535) und SET(n aus 64) dafür verwenden.
Beide sind aber mit Vorsicht zu genießen, insbesondere, wenn man numerische Werte hinterlegt. Es wird dann nämlich erst mit dem Wert verglichen und dann noch mit dem Index. Leider habe ich bisher keine Möglichkeit gefunden, das Verhalten zu kontrollieren.
Außerdem können bei einer nachträglichen Änderung in der Liste ALLE Daten der Spalte verloren gehen.
Freu mich auf Antwort
Tom