PHP/MySQL: Query liefert nur ein Element zurück

...komplette Frage anzeigen

2 Antworten

Was genau möchtest du erreichen? Eine (die Erste) Zeile oder alle gefundenen Zeilen verarbeiten? Wenn du alle verarbeiten willst, musst du das mit mysql _ fetch _ array() und einer while-Schleife machen.

while ($row = mysql_fetch_array($query)) {
    echo $row['feldname'];
}

$row wird hierbei zu einem Array. Du kannst also jedes einzelne Feld in der aktuellen Zeile mit dem entsprechenden Feldnamen ansprechen, siehe Beispiel. Für jede gefundene Zeile in $query wird einmal die Schleife durchlaufen.

TheFrozenOne 12.07.2011, 15:13

Werde ich mal ausprobieren.

0
TheFrozenOne 12.07.2011, 15:22

Wunderbar. Funktioniert. Danke. :)

Ich habs auch mit foreach() ausprobiert... Da ging das aber nicht... Hast du vielleicht ne Idee warum?

0
eisMoewe 12.07.2011, 15:38
@TheFrozenOne

Warum anders, wenn es so auch makellos funktioniert? :P

foreach ist etwas anderes. Damit durchläufst du ein Array Feld für Feld. In der oben genannte while-Schleife dagegen wird bei jedem erneutem Schleifen-Durchgang erneut das mysql-fetch-array() durchgeführt (welches immer die oberste Zeile als Array zurück gibt) , weswegen die nächste Zeile dann als Array in der $row landet. Die $row ist zwar ein Array, aber immer nur eine einzige Zeile. Es wird also quasi wie ein Stapel Zeile für Zeile abgearbeitet, bis mysql-fetch-array() nichts mehr liefern kann. Hoffe, ich hab es einigermaßen verständlich erklärt ^^

0
TheFrozenOne 12.07.2011, 16:19
@eisMoewe

Jo. Hab ich verstanden... Nun funktioniert es aber nicht, wenn ich mehr als eine Spalte abfrage...

Siehe:

SELECT 
        $Type.ID as 'ID',
        $Type.Name as 'Unit'
    FROM 
        $DB.$Type;

Als Ergebnis bekomm ich dann mit deiner Methode "NULL". :(

0
eisMoewe 12.07.2011, 20:47
@TheFrozenOne

Ich habe bisher nie "AS" bei einer SELECT-Anfrage verwendet. Vielleicht liegt da schon der Fehler.

Eventuell hast du auch die Prozedur innerhalb der while-Schleife falsch gestaltet. Du darfst natürlich nicht die Daten, die in der $row stehen, unverarbeitet bis zum Schleifen-Ende nutzen, da diese bei der nächsten Prozedur ja wieder überschrieben werden.

Außerdem finde ich deine SQL-Anweisung etwas verwirrend. Was befindet sich hinter der Variable $Type? Und warum taucht diese vor und hinter dem FROM auf? Eine Tabelle muss nur einmal angegeben werden. Ein Beispiel:

SELECT id, name FROM tabelle;

und schreibst in deine Funktion, die dich mit MySQL verbindet, zusätzlich

mysql_select_db("datenbankname", $verbindung) or die();

falls du sowieso nur in einer Datenbank arbeitest.

Dieses Vorgehen vereinfacht nicht nur alles, sondern schließt zudem Fehlerquellen aus. Ich weiß nicht, ob da der Fehler liegt, da ich immer so wie oben beschrieben vorgehe, aber du kannst es ja mal probieren. Solltest du trotzdem nicht weiter kommen, kannst du mir auch deinen Code posten (via pastebin.com oder so) und ich schau mir das ganze mal intensiver an.

0
TheFrozenOne 13.07.2011, 10:20
@eisMoewe

Die Abfrage ist so korrekt. Ich hab sie getestet... Es geht halt nur um die Ausgabe des Ergebnisses. ^^

AS benutzt man um den Spaltennamen zu verändern... :)

$Type ist mein Tabellenname... Wird halt per Variable übergeben. Quasi

SELECT
Tabellenname.Spaltenname AS NeuerSpaltenname,
Tabellenname.Spaltenname AS NeuerSpaltenname
FROM
Datenbankname.Tabellenname

Ich könnte höchstens versuchen die Datenbank direkt per

mysql_select_db()

auszuwählen... Ma schaun... Ich versuchs ma.

0
ak56Lk 13.07.2011, 20:05
@TheFrozenOne

AS benutzt man wenn man Tabellen joint. Wenn 2 Tabellen jeweils eine Spalte mit "name" haben und man will beide selektieren, dann kommt MySQL (und andere auch) durcheinander, weil die keine Glaskugel haben und somit nich hellsehen können. Durch AS gibt man denen halt einen neuen Namen, ein Alias. Denn auch beim fetchen würdest du sonst Probleme bekommen, da ein Array nicht 2x den selben assoziativen Schlüssel haben kann, was auch logisch ist ^^

0

Leider nicht, aber du scheinst ähnliche RPobleme wie ich zu haben guck dir bitte mal meine Frage an vielleicht kannst du mir ja helfen?

Was möchtest Du wissen?