Tom: Kleines MySQL-Tool

Beitrag lesen

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