kostenloser Webspace werbefrei: lima-city


Liste aller Tabellen in einer MySQL-DB ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    i******g

    Hallo

    wie erhalte ich eine Liste aller Tabellen in einer MySQL-DB ?

    z.B so in der Art:

    $dbcon = mysql_connect($mysql_server,$mysql_user,$mysql_pass);

    while ( TABELLE_EXISTIERT ) { $tabellenamearray[] = ...?? $name_der tabelle; ??.... }

    ... oder so ähnlich ?!?

    als ich suche irgendwas, damit ich alle Tabellen (Namen) der Datenbank als Array bekomme.
    Danke!


  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich denke das üsste mit dieser http://de2.php.net/manual/de/function.mysql-list-tables.php funktion gemacht werden.

    mfg

    Felix
  4. Autor dieses Themas

    i******g

    hallo
    super, vielen Dank, das funktioniert.

    while ($row = mysql_fetch_row($result)) { 
    echo " <br> <b>".$row[0]."</b> \r\n";
    }


    bin nur etwas verwirrt weil $row[0] als Array vorliegt ?!
    ... aber $row[1] .. etc. sind leer also Sinnlos? egal, ist halt so ...und funktioniert.
    Danke
    :)

    edit: was wäre mit mysql_fetch_array() .... Unterschiede ?!?
    ...


    Beitrag zuletzt geändert: 4.7.2010 9:38:07 von ikatalog
  5. Wenn ich mich recht entsinne, kannst du Arrays in PHP relativ einfach erweitern, indem du auf einen Index zugreifst. Sprich: Ja, Es ist nur Index 0 verfügbar, falls du aber auf Index 1 zugreifst, wird das Array um leere Elemente erweitert.

    Der Unterschied zwischen mysql_fetch_array, ..._row und ..._assoc ist ein kleiner, der viel ausmachen kann. Man nehme als Beispiel eine Tabelle, die die Spalten id und name enthält.

    mysql_fetch_row() liefert die Datensätze als indizierte Array zurück. Du kannst nun per $row[0] und $row[1] auf "id" und "name" zugreifen, nicht aber per $row['id'] und $row['name'].
    Mit mysql_fetch_assoc() verhält es sich genau anders herum: Ein Zugriff auf die Datenfelder ist nur per Namen verfügbar, denn es ist ein assoziatives Array ("es besteht eine Assoziation/Verbindung zwischen dem Spaltennamen und seinem Wert"). $row['id'] würde also funktionieren, $row[0] würde keinen Wert liefern.
    mysql_fetch_array kann beides der vorangegangenen Funktion. Per Standard gibt es die Daten als assoziatives und gleichzeitig indexiertes Array zurück. Sowohl $row['id'] als auch $row[0] liefern also gültige Werte. mysql_fetch_array kann man allerdings Parameter mitgeben, so dass es sich exakt wie mysql_fetch_row() oder mysql_fetch_assoc() verhält.

    Wozu nun das Ganze?
    Wenn du weißt, dass du nur mit Indizes auf deine Daten zugreifen möchtest (0,1,2 ...), nutze mysql_fetch_row, denn das ist die effektivste Methode. Allerdings sieht es im Quellcode mitunter schöner aus, mit den Spaltennamen zu arbeiten, weswegen sich mysql_fetch_assoc() anbietet. Damit ersparst du dir auch viel Tüftelarbeit, falls sich mal die Struktur der Tabelle ändert: Bspsweise wird zwischen "id" und "name" eine neue Spalte "datum" eingefügt", also ist "name" nun fortan nicht mehr mit $row[1], sondern mit $row[2] erreichbar.
    Auf mysql_fetch_array() kann und sollte eigentlich in den meisten Fällen verzichtet werden.
  6. Inwiefern kann man den bei mysql_fetch_array() beides benutzen? Ich meine, wie wird das intern gehandhabt?
    Nach Aufruf haben $row[0] und $row['id'] ja den gleichen Wert. Wenn ich jetzt aber $row[0] änder, ändert sich dann auch der Wert aus $row['id']?

    => Eigentlich sollte dies ja nicht der Fall sein.

    Beitrag zuletzt geändert: 4.7.2010 13:02:15 von robbmaster
  7. Der assoziative und der indizierte Zugriff "schauen" nicht auf die selben Daten, sondern haben getrennte Daten.

    D.h., dass du per Index die Daten ändern kannst, ohne dass du die entsprechenden Daten im assoziativen Teil änderst. Hier mal ein Testbeispiel:

    $row = mysql_fetch_array($resultSet);
    
    echo "indizierter Wert:".$row[0].", assoz. Wert: ".$row['id']."<br />"; 
    $row['id'] = -1;  /* angenommen hier steht vorher ein Wert ungleich -1 drin */
    echo "indizierter Wert:".$row[0].", assoz. Wert: ".$row['id']."<br />";


    Das könnte u.a. bedeuten, dass du Daten, die du mit mysql_fetch_array() holst, doppelt so viel Speicher benötigen wie mit dem "row"- oder "assoc"-Pendant. Ganz sicher bin ich mir allerdings nicht, denn es könnte sein, dass PHP das "copy on first write"-Muster implementiert (siehe Wikipedia unter: http://de.wikipedia.org/wiki/Copy-On-Write).

    EDIT: Hier noch ein Link, dass die "Doppelter Ressourcen-Verbrauch"-Theorie untermauert:
    http://forums.devshed.com/php-development-5/mysql-fetch-object-vs-mysql-fetch-array-211260.html

    Beitrag zuletzt geändert: 4.7.2010 13:30:08 von iniquitius
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!