Olly: Spaltennamen einer Tabelle ermitteln?

Hallo,

wie man die Tabellennamen einer Datenbank (mySQL) ermittelt ist klar:

$result = mysql_query("show table status from $strDBName");
while ($row = mysql_fetch_assoc($result))
 {
  echo $row['Name';
 }

Wie komme ich an die Spaltennamen einer Tabelle ran??

Ich möchte mir sämtliche Spaltennamen einer beliebigen Tabelle - ähnlich wie oben - anzeigen lassen.

Vielen Dank und Grüße

Olly

  1. Hallo,

    Wie komme ich an die Spaltennamen einer Tabelle ran??

    PHP: mysql_field_name()

    MySQL: SHOW COLUMNS

    Details in den entsprechenden Manuals.

    Gruesse,

    Thomas

    1. Hi Thomas,

      ich bekomms einfach nicht hin:-(

      Bin z.B. ratlos warum folgender Code nicht funktioniert:

      $result=mysql_query("SHOW COLUMNS FROM $Tabelle");
      $array = mysql_fetch_array($result);
      echo $array[2];

      Fehlermeldung:
      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

      Danke und Grüße

      Olly

      1. Hallo,

        Bin z.B. ratlos warum folgender Code nicht funktioniert:

        $result=mysql_query("SHOW COLUMNS FROM $Tabelle");
        $array = mysql_fetch_array($result);
        echo $array[2];

        Fehlermeldung:
        Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

        Der Query-String ist offenbar falsch.
        Setze den Query-String zuerst zusammen, und lass ihn Dir ausgeben.

        $sql="SHOW COLUMNS FROM $Tabelle";
         print("<p>Query: [$sql]</p>\n");

        Setze dann erst die Query an die Datenbank ab.

        $result=mysql_query($sql);

        Und bevor Du auf $resultat zugreifst, pruefe zuerst, ob es ueberhaupt
        existiert.

        if (!$result) /* Gar kein Ergebnis */
           {
              echo "<h2>DB-Fehler:</h2>";
              echo "<p>Fehler Nr. ".mysql_errno().": ".mysql_error()."</p>\n";
           }
         else /* Ein Ergebnis mit 0 oder mehr Zeilen */
           {
             /* _Jetzt_ kannst Du weiterfahren mit mysql_fetch_result oder so... */
           }

        Folgender Code funktioniert bei mir:

        ---

        $ftabname="meinetabelle";
         $sql="SHOW COLUMNS FROM $ftabname";
         print("<p>Query: [$sql]</p>\n");
         $ergebnis=mysql_query($sql);
         if (!$ergebnis) /* Gar kein Ergebnis */
           {
             $htmlout.="<h2>Fehler bei Tabelle [<code>$ftabname</code>]:</h2>";
             $htmlout.="<p>Die Felder der Tabelle können nicht aufgelistet werden, oder die Tabelle existiert gar nicht</p>\n";
             $htmlout.="<p>Fehler Nr. ".mysql_errno().": ".mysql_error()."</p>\n";
           }
         else /* Ein Ergebnis mit 0 oder mehr Zeilen */
           {
             $anzahlspalten=mysql_num_fields($ergebnis);
             $anzahlzeilen=mysql_num_rows($ergebnis);
             print("<p>Tabelle: [$ftabname].</p>\n");
             print("<p>MySQL-Resultat: Anzahl Spalten: [$anzahlspalten], Anzahl Zeilen:[$anzahlzeilen]</p>\n");
             $htmlout .= "<table border='1'>\n";
             $htmlout.="<tr>\n";
             for ($i=0; $i<$anzahlspalten; $i++)
               { $htmlout.="<th>".mysql_field_name($ergebnis,$i)."</th>\n"; }
             $htmlout.="</tr>\n";
             if ($anzahlzeilen==0)
               { $htmlout.="<tr><td colspan='$anzahlspalten'>(Leer.)</td></tr>\n"; }
             else
               {
                 while ($zeile=mysql_fetch_row($ergebnis))
                   {
                    $htmlout .= "<tr>\n";
                    for ($i=0; $i<$anzahlspalten; $i++)
                        {
                          $feldinhalt=htmlentities(stripslashes($zeile[$i]));
                          $htmlout.="<td>$feldinhalt</td>\n";
                        }
                    $htmlout.="</tr>\n";
                   }
               }
             $htmlout.="</table>\n";
            }
        print($htmlout);

        ---

        Resultat:

        Field                     Type                  Null  Key Default Extra
        bereichid               int(10) unsigned         PRI             auto_increment
        bereichname          varchar(20)
        u.s.w.

        Das Resultat von SHOW COLUMNS ist also eine Tabelle;
        die Spaltennamen stehen im ersten Feld jeder Zeile.
        Um nur gerade die Namen auszugeben, reicht also auch (ungetestet!):

        while ($zeile=mysql_fetch_row($ergebnis))
            { echo $zeile[0] . "<br>\n"; }

        ---

        Ich weiss nicht genau, was Du vorhast.
        Wenn Du allerdings sowieso auch die Daten verwendest,
        (und nicht nur die Spaltennamen), dann reicht meistens
        eine einzige DB-Abfrage ("SELECT * FROM Tabelle"),
        und mit mysql_field_name() kriegst Du die Namen der
        Spalten ja auch in PHP.

        HTH, Gruesse,

        Thomas

        1. Hi Thomas,

          und wie es mir geholfen hat!!!!!
          Vielen Dank für dein starke Hilfe!

          Viele Grüße

          Olly

  2. Hello,

    Wie komme ich an die Spaltennamen einer Tabelle ran??

    Scahu mal in [pref:t=63837&m=362530]

    Grüße

    Tom