King Casi: Kleines MySQL-Tool

Hallo Leute,

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.

Das klappt auch soweit.

Ich kann in diesem Tool auch die Daten ansehen. Aber damit nicht genug, die Daten sollen auch bearbeitet werden. Und das ist mein Problem: Ich weiß im voraus nicht, wie die einzelnen Felder lauten. Daher habe ich keinen Lösungsansatz, wie ich ein UPDATE oder DELETE Statement erzeugen kann.

Kann mir vielleicht jemand weiterhelfen?

Danke!

Casi

  1. Moin!

    Kann mir vielleicht jemand weiterhelfen?

    http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_field_name.php

    Danke!

    Bitteschön.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_field_name.php

      Danke, aber das ist nicht mein Problem: Die Feldnamen erhalte ich ja. Aber wie kann ich die in ein DELETE * FROM Table WHERE ... einbauen? Das ist mein Problem.

      1. Moin!

        http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_field_name.php

        Danke, aber das ist nicht mein Problem: Die Feldnamen erhalte ich ja. Aber wie kann ich die in ein DELETE * FROM Table WHERE ... einbauen? Das ist mein Problem.

        Das brauchst Du gar nicht. Der Befehl DELETE löscht _immer_ alle Spalten Deiner Tabelle, die mit der WHERE - Klausel übereinstimmen.

        Was Du suchst ist eventuell:

        UPDATE tabellenname SET spalte = NULL WHERE bedingun(en)

        Falls das Deine Frage nicht beantwortet formuliere diese in diesem Thread neu.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Moin!

          Der Befehl DELETE löscht _immer_ alle Spalten Deiner Tabelle, die mit der WHERE - Klausel übereinstimmen.

          UPS. Es sind natürlich die Zeilen, die komplett gelöscht werden. Und zwar soweit sie mit der WHERE - Klausel übereinstimmen.

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. 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