Wie frage ich alle Spalten einer Tabelle ab?

Tservarius

Mitglied
Kurz un knackig.
Ich möchte alle Spalten einer Tabelle in einem PHP-Script abfragen und in einem DropDown ausgeben:
habs versucht, nur irgendwie fruchtet mein:
$result = mysql_querry(SHOW COLUMNS FROM '$spaltenaustabelle');
nicht so ganz.

weis jemand rat?

#############

Das Script:

$result = mysql_querry(SHOW COLUMNS FROM '$spaltenaustabelle');

echo ("<select size=\"1\" name=\"spalte\">");
echo ("<option selected value=\"\">Keine Spalte verfügbar</option>");

while ($row = mysql_fetch_row($result)) {
echo "<option value=\"$row[0]\">$row[0]</option>\n<br>";
}
mysql_free_result($result);
echo ("</select></td>
 
als erstes solltest du dir angewöhnen die Fehlermeldungen mit einzubauen wie z.B. or die ();

Dann ist folgendes, bevor du dein Script testest, prüfe am besten alles noch mal durch. Denn dein mysql_querry schreibt man z.B. so: mysql_query();

Hinzu kommt, das man innerhalb der mysql_query()-Klammern mit denen hier beginnt -> " und vor dem Klammerende wieder aufhört mit ".

Da du für einen select-tag logischerweise mehrere Möglichkeiten hast, musst du logischerweise das ganze was an Datenausgabe aus der DB-Abfrage kommt in eine while() Schleife einbinden. Ansonsten bekommst du ausschl. den letzten Eintrag in der DB.

Nun noch der Hinweis in den Tutorialbereich. Les am besten dort einige Beispiele durch, wie man eine Datenbankabfrage startet, aufbaut und mit dem Ergebnis daraus eine einigermaßen gute Darstellung bekommt.

PHP:
<?php
// hier noch ein Beispiel
include('mysql.php'); // Beinhaltet die Zugangsdaten zur Datenbank inkl. Auswahl der DB

// Diese Daten sollten übrigens außerhalb des Hauptroots liegen - was die Zugangsdaten betrifft.

// Abfrage der Datenbank inkl. der Angabe welche Tabelle abgefragt wird. Das Sternchen :) dient dazu, alle Spalteninhalte in ein Array zu packen.
$contakt = mysql_query("SELECT * FROM tabellenname");

// Weil es um mehrere Inhalte geht sieht das wie folgt aus bzgl. der while() Schleife
while($ergebnis = mysql_fetch_assoc($contakt)) {
   echo "<opiton value=\"".$ergebnis['deine_wahl']."\">".$ergebnis['inhalt']."</option>";
}

// die select-tag anfang -und ende wirst du selbst einbinden können.

// Wenn du eine sehr schnelle Abfrage erreichen möchtest, nimmst du statt 
// mysql_fetch_assoc() mysql_fetch_object();
// achte aber auf die Verarbeitung danach ;)
?>
Wie gesagt, lese dir noch einiges durch und teste das alles auf deinem PC, bevor es ins Netz kommt.
 
Ich möchte erst einmal sailas Beitrag korrigieren:
als erstes solltest du dir angewöhnen die Fehlermeldungen mit einzubauen wie z.B. or die ();
Eine Fehlerbehandlung ist schon empfehlenswert, jedoch nicht einfach nur mittels die(). Besser sind schon
beschreibende Fehlerbehandlungen wie etwa
PHP:
if(!$result = mysql_query($query)) {
  echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
  exit;
}
Hinzu kommt, das man innerhalb der mysql_query()-Klammern mit denen hier beginnt -> " und vor dem Klammerende wieder aufhört mit ".
Das ist nicht ganz korrekt. Wichtig ist nicht etwa die Angabe von Anführungszeichen, sondern, dass der erste Parameter der mysql_query, also die Anfrage, eine Zeichenkette erwartet.

Desweiteren sollten Anfragen mit SELECT * vermieden werden.
 
Ok, jetzt fangen wir an Klugschei.....

Wie er eine Fehlerbehandlung einbaut bleibt ihm überlassen. Wichtig ist, das er grundsätzlich eine hat! Worin übrigens der Unterschied zwischen or die() und !$result liegt hätt ich gerne erklärt. Wenn schkon Klug dann auch richtig.

Nicht umsonst war der Hinweis Tuts...


Und wer lesen kann ist klar im Vorteil.
.....Ich möchte alle Spalten einer Tabelle.....


:-)
 
Worin übrigens der Unterschied zwischen or die() und !$result liegt hätt ich gerne erklärt.
Der Unterschied zwischen die() und !$result besteht – neben der Tatsache, dass diese eigendlich nicht verglichen werden können – darin, dass es sich bei einem um eine Funktion (die()) und bei dem anderen um einen Operator (!) handelt.

Und wer lesen kann ist klar im Vorteil.
Das stimmt!
Selbst wenn alle Spalten tatsächlich benötigt werden, sollten sie separat aufgeführt werden, weil
  • die Tabelle nachträglich erweitert werden könnte, die neue(n) Spalte(n) (im worst case ein BLOB!) nach der Abfrage aber nicht gebraucht werden
  • die Reihenfolge der Spalten bei der Ausgabe sonst undefiniert ist (bei den meisten Datenbanken ist es die Reihenfolge der Spaltendefinition bei der Anlage der Tabelle). Diese Reihenfolge könnte sich ändern (z.B. durch Einspielen eines Backups nach Erweiterung der Tabelle, durch eine neue Version des DBMS, etc.)
  • die Spalten sonst möglicherweise keinen vernünftigen oder eindeutigen Namen haben. Führt man die Spalten einzeln an, kann man mittels AS einen Namen (Alias) vergeben: SELECT p.pers_p_nr AS personalnummer FROM personal p ORDER BY personalnummer
  • dadurch im Script quasi automatisch dokumentiert wird, welche Spalten anschließend verarbeitet werden
FAQ der Newsgroups de.comp.lang.php.* - 16.14. Warum soll ich nicht SELECT * schreiben?
 
@saila: Klar bleibt es ihm überlassen, doch soll ne Fehlerausgabe im Design ja aspäter auch ordentlich aussehen und da sich bei vielen hier zeit das sie wenn Fehlerausgabe diese einfach hinhunzen mit nem or die sind solche Möglichkeiten schon gut zu kennen....

Den Unterschied zwischen dem boolschen NOT Operators ! und der Funktion die() ist neben der Aussage von _gumbo noch dadurch zu beschreiben, dass die() nichts anderes ist, als eine Ausgabe die Anschliessen das Script beendet, ähnlich einem echo mit nachfolgendem exit.
Was man eher vergleichen könnte mit dem ! wäre das or, wenn der linke teil nicht TRUE ist wird eben or ausgeführt....
 
Der Vorteil an meiner Fehlerbehandlung besteht wohl darin, dass der Fehler auch wirklich behandelt wird, anstatt bloß kontextlose Meldungen zu schreiben.

Was den Verneinungsoperator angeht, verneint er einfach den nachstehenden Ausdruck. Eine längere Version des von mir beschriebenen Beispiels wäre z. B.:
PHP:
if( ($result = mysql_query($query)) === FALSE ) {
  [...]
}
 
Zurück