mysql fetch array / PHP - doppelte Anzahl Spalten
ChrisL
- datenbank
Hallo
Folgendes Beispiel:
$qry1 = mysql_query( "SELECT * FROM tb WHERE fd1='$var'");
while($ar = mysql_fetch_array($qry1)) {
echo count($ar);
}
Die Query und alles funktioniert, nur bekomme ich die doppelte Anzahl Spalten mit Count. Z.b. hat meine Tabelle 3 Spalten:
"DatenSpalte1","DatenSpalte2","DatenSpalte3"
Als Resultat erhalte ich nun aber 6 Spalten, beispielhaft:
"DatenSpalte1","DatenSpalte2","DatenSpalte3","","",""
Die überschüssigen Felder sind also immer leer und es ist immer genau die doppelte Anzahl.
Ich frage mich jetzt wo die Ursache liegt und hoffe jemand hat eine Idee. Früher im Code habe ich schonmal mysql_fetch_array benutzt, allerdings war die Query nicht identisch (gleiche Tabelle, aber anderes Kriterium). Ich vermute daher, dass ein Zusammenhang auszuschliessen ist, oder doch nicht?
Bin für Hinweise dankbar.
Gruss
Chris
Hello,
$qry1 = mysql_query( "SELECT * FROM tb WHERE fd1='$var'");
while($ar = mysql_fetch_array($qry1)) #?? Das sit soch falsch. $ar[] = ...
{
echo count($ar);
}Die Query und alles funktioniert, nur bekomme ich die doppelte Anzahl Spalten mit Count. Z.b. hat meine Tabelle 3 Spalten:
Ultrakurzantwort: RTFM
Etwas länger:
echo "<pre>\n";
print_r($ar);
echo "</pre>\n";
Noch etwas länger:
Vergleiche im PHP-Manual die Funktionen:
http://www.php.net/manual/en/function.mysql-fetch-array.php
http://www.php.net/manual/en/function.mysql-fetch-assoc.php
http://www.php.net/manual/en/function.mysql-fetch-row.php
Die Ultralangversion überlasse ich dem Thread...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
while($ar = mysql_fetch_array($qry1)) #?? Das sit soch falsch. $ar[] = ...
Was soll daran falsch sein? Ich bin der Meinung es stimmt so wie er es geschrieben hat.
Ultrakurzantwort: RTFM
Was heißt das? Read the fu**ing manual?
Die Ultralangversion überlasse ich dem Thread...
Geht doch ganz kurz. Siehe https://forum.selfhtml.org/?t=158992&m=1034223.
Oder noch einfacher: mysql_fetch_array($gry1, MYSQL_ASSOC)löst sein Problem. Oder er teilt durch 2 ;)
Grüße, Matze
Hello,
while($ar = mysql_fetch_array($qry1)) #?? Das ist doch falsch. $ar[] = ...
Was soll daran falsch sein? Ich bin der Meinung es stimmt so wie er es geschrieben hat.
Die Ultralangversion überlasse ich dem Thread...
Geht doch ganz kurz.
Nö, Du scheinst ja die von mir vorgeschlagenen Tests nicht einmal durchgeführt zu haben.
Nochmal zur Wiederholung:
echo "<pre>\n";
print_r($ar);
echo "</pre>\n";
Ich hatte angenommen, dass Du das ganze Resultset abholen wolltest.
Dann sollte man auch besser so schreiben.
$_result = Array(); # Gesamt-Array für das ganze Rresultset
$_ar = Array(); # Hilfs-Array
while($ar = mysql_fetch_assoc($qry1) # einen Datensatz abholen
{
$_result[] = $_ar; # und an das Gesamt-Array übertragen
}
echo count $_result; # liefert die Anzahl der Datensätze
echo count $_result[0] # liefert die Anzahl der Elemente (Spalten) eines Datensatzes
# vorausgesetzt, es gab überhaupt einen.
# Man müsste also vorher fragen
# (isset($_result[0]) and is_array($_result[0]))
Wenn es ein Ergebnis gab, sollten alle $_result[0] bis result[n] dieselbe Anzahl Elemente haben
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Tom,
while($ar = mysql_fetch_array($qry1)) #?? Das ist doch falsch. $ar[] = ...
Was soll daran falsch sein? Ich bin der Meinung es stimmt so wie er es geschrieben hat.
Ich auch. Es ist richtig.
Nö, Du scheinst ja die von mir vorgeschlagenen Tests nicht einmal durchgeführt zu haben.
Chris läßt sich die Anzahl der Spalten ausgeben. Das ist etwas ganz anderes
als das, was Du schreibst.
Ich hatte angenommen, dass Du das ganze Resultset abholen wolltest.
Tom, achte doch bitte darauf, wem Du antwortest:
Matze ist nicht der Verfasser des Ausgangspostings. Sein konkreter Hinweis
darauf, dass mysql_fetch_array() ein Array mit assoziativen _und_ numerischen
Indizes zurückliefert, war in meinen Augen hilfreicher als Deine Ausführungen.
Der OP fragte nicht danach, wie er die Daten abholen kann, das scheint ihm
geläufig zu sein, er war nur verwundert, warum er zweimal soviele Spalten hatte.
Freundliche Grüße
Vinzenz
Hello Vinzenz,
sas wird also schon wieder ein Geschäftsordnungs-Thread.
Schade eigentlich.
while($ar = mysql_fetch_array($qry1)) #?? Das ist doch falsch. $ar[] = ...
Was soll daran falsch sein? Ich bin der Meinung es stimmt so wie er es geschrieben hat.
Ich auch. Es ist richtig.
Nein es ist auf jeden Fall falsch.
Wenn er die Anzahl der Spalten des vorhandenen Resultsets haben will, muss er nicht das gesamte Resultset durchnuddeln mit while...
Es reicht dann, mit
if($res) ## (Nut BTW: er benutzt $qry1,
## aber das wäe für mich ein Name für einen Querysting)
{
$ar = mysql_fetch_assoc();
$count = count ($ar);
}
abzufragen.
Wenn ich ein Resultset mit while durchlaufen lasse, und dann aber nur in jeder Zeile dieselbe Antwort erhalte, bis auf die letzte, dann ist das für mich falsch aufgebaut.
Die einzgie Möglichkeit, Euch beide zu retten (*g*) sehe ich darin, dass der OP sich nun nochmal meldet und kundtut, dass er doch nur überprüfen wollte, ob das Resultset tatsächlich immer genauso viele Spalten pro Zeile enthält, also die Prüfung tatsächlich für _alle_ Zeilen vornehmen wollte.
Das Ergebnis dann aber nur auf der Standardausgabe zu verewigen und es sonst ins Nirwana zu senden, lässt nicht unbedingt auf Sinnhaftigkeit schließen.
Warten wir das also ab.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
Ich hatte angenommen, dass Du das ganze Resultset abholen wolltest.
Sorry, ich bin nicht der OP gewesen. Trotzdem danke für die Nachhilfestunde!
Grüße, Matze
Hello,
Sorry, ich bin nicht der OP gewesen. Trotzdem danke für die Nachhilfestunde!
Der OP hat eine Frage gestellt, die vermuten ließ, dass er nicht genau wusste, was er wollte.
Du hast meine Antwort bemängelt, scheinbar ohne meinen dazugehörigen Hinweis zu berücksichtigen.
Dass dieser Thread nicht einfach mit einem hingeworfenen Zitat geführt werden kann, haben wir neulich schon einmal ausführlich disktutiert (das geht jetzt auch an Vinzenz).
Die Quellen zur Information ahbe ich ganannt und gehe nach wie vor davon aus, dass wir hier nicht bei "getScript" sind, sondern bei _S_E_L_F_ (das geht auch an Vinzenz)
Und da ich gerade feststelle, dass ich immer saurer werde, je mehr ich schreibe, steige ich hjier lieber aus. Ich empfehle den anderen Stammpostern und den "Machern", dass sie sich vielleicht erstmal klar darüber werden, was sie eigentlich wollen. Schnelle, hingeworfenene Hilfe (der OP sagt dann meistens noch nichtmal Danke und kommt auch nicht wieder, um die weitere Diskussion zum thema zu verfolgen), oder einen einen Dialog, der schrittweise zur Lösung führt und das Mitdenken fördert?
Bei den Dialogthreads habe ich jedenfalls immer mehr gelernt, als bei hingeschmissenen vermeintlichen Schnelllösugen.
Also bis (viel) später dann.
Mich seid Ihr jetzt erstmal los.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
Und da ich gerade feststelle, dass ich immer saurer werde(...)
Entschuldige bitte, das wollte ich nicht erreichen.
Entschuldige bitte auch, falls meine Posts dich dazu veranlasst haben so zu reagieren. Auch das war nicht meine Absicht.
So, das von mir verwendete Zitat von php.net beantwortet nur leider trotzdem exakt und ausführlich die Frage des OP.
Deine Antworten sind IMHO etwas am Thema vorbei. Fachlich und sachlich sicher korrekt.
Cool down please, ich wollte keinen Streit provozieren.
Grüße, Matze
echo $begrüßung;
So, das von mir verwendete Zitat von php.net beantwortet nur leider trotzdem exakt und ausführlich die Frage des OP.
Deine Antworten sind IMHO etwas am Thema vorbei. Fachlich und sachlich sicher korrekt.
Es gibt da einen Spruch: Gib einem Mann einen Fisch und er ist für einen Abend satt. Zeige ihm, wie er eine Angel verwendet, und er kann sich in Zukunft selbst ernähren. (oder so ähnlich)
Deine Antwort war der Fisch. Tom hat versucht, dem OP zu zeigen, wie man solchen Rätseln auf die Spur kommt, wie dem, vor dem der OP stand. Denn solche Rätsel trifft man im Laufe seines Programmiererlebens immer wieder an. Eine Kontrollausgabe von Variableninhalten ist die wichtigste Methode zu ihrer Lösung. Ebenfalls sollte das Handbuch eine der ersten Anlaufstellen bei Problemen mit bestimmten Dingen einer Programmierumgebung (z.B. Funktionen) sein. Jemand der Fragen wie der OP stellt, zeigt damit im Grunde auch, dass er diese Handwerkszeuge noch nicht genügend beherrscht. Es ist also keinesfalls falsch, ihm diese ebenfalls mit auf den Weg zu geben.
echo "$verabschiedung $name";
Es gibt da einen Spruch: Gib einem Mann einen Fisch und er ist für einen Abend satt.
Zeige ihm, wie er eine Angel verwendet, und er kann sich in Zukunft selbst ernähren.
(oder so ähnlich)
Der Spruch ging so ähnlich, ja.
Entzünde einem Frierenden ein Feuer und er wird für eine Nacht gewärmt werden.
Zünde ihn selbst an und er wird es für den Rest seines Lebens warm haben.
Roland°
Hallo,
jaja, Nachts ists kälter als draussen.^^
Die überschüssigen Felder sind also immer leer und es ist immer genau die doppelte Anzahl. Ich frage mich jetzt wo die Ursache liegt(..)
Entschuldigung noch einmal. Der OP hat eine _eindeutige_ Frage gestellt.
Keine die irgendwelche 'Vermutungen' zuließe.
Meine Antwort war IMHO kein Fisch. Meine Antwort hat dem OP IMHO deutlich erklärt warum er das "Problem" hat (Angel) und hab ihm auch die Lösung genannt (gratis Fisch). Zusätzlich bekam er noch eine 'Rutenverlängerung' ;) inform der Quelle des Zitats^^
Jemand der Fragen wie der OP stellt, zeigt damit im Grunde auch, dass er diese Handwerkszeuge noch nicht genügend beherrscht. Es ist also keinesfalls falsch, ihm diese ebenfalls mit auf den Weg zu geben.
1. Hab ich das und dann: sicher kann ich Links erstellen, aber ob das nun besser ist, als die relevante Stelle zu zitieren sei dahin gestellt.
Ich habe ihm IMHO sehr gutes Handwerkszeug mit auf den Weg gegeben. Beachte bitte auch den Zeitpunkt der Posts, meiner kam deutlich nach Tom seinem. Tom zu wiederholen wär Blödsinn gewesen.
Grüße, Matze
Hallo,
von PHP.net:
Das optionale zweite Argument Ergebnistyp in mysql_fetch_array() ist eine Konstante und kann die folgenden Werte annehmen: MYSQL_ASSOC, MYSQL_NUM und MYSQL_BOTH. Diese Eigenschaft steht seit PHP 3.0.7 zur Verfügung. MYSQL_BOTH ist der Standard für diesen Paramater.
Verwenden Sie MYSQL_BOTH, erhalten Sie ein Array mit assoziativen und numerischen Indizes.
Grüße, Matze
Hallo an alle
Eure Beiträge haben mir geholfen, herzlichen Dank.
Der Hinweis RTFM ist nicht unberechtigt, aber ich dachte das Problem liegt bei mir und nun weiss ich, dass die Funktion defekt ist :-))
MfG aus Australien
Chris
Hallo,
Der Hinweis RTFM ist nicht unberechtigt, aber ich dachte das Problem liegt bei mir und nun weiss ich, dass die Funktion defekt ist :-))
Was veranlasst dich zu diesem Urteil? Die Funktion macht genau das, was man von ihr verlangt.
Das Problem liegt bei dir. Du musst die Funktion richtig anwenden oder die richtige Funktion verwenden, dann erhälst du auch das gewünschte Ergebnis.
Grüße, Matze