merkwürdiges php-problem

GruenSein

Mitglied
Thread Starter
Mitglied seit
15.03.2007
Beiträge
346
ok, nachdem ich mit python aufgegeben hab, weil mein hoster anscheinend nicht in der lage ist, mysql-bindigs hinzukriegen, habe ich mal wieder ein sehr sinnloses php-problem. ein script, was schon monate funktioniert hat, läuft nicht mehr. ich habe dann angefangen alles auszukommentieren und langsam durchzuprobieren, woran es liegt:

while($result = mysql_fetch_array($sql_data))
{
... egal was hier steht, selbst mich simplen echo probiert
}

das doofe ist:
sobald der fehler auftritt, wird einfach nichts mehr ausgegeben. keine fehlermeldung, kein nix. ich habe die fehler-meldungen schon auf E_ALL gestellt und das ändert nichts. woran liegts? weiß das jemand?
 

Atarimaster

Mitglied
Mitglied seit
06.08.2007
Beiträge
708
Spontan würde ich vermuten, dass der Fehler gar nicht bei der gezeigten Schleife liegt, sondern dass der vorhergehende SELECT ein leeres Ergebnis geliefert hat – also, dass nichts gefunden wurde.
Wenn der Query syntaktisch korrekt und auch mit dem richtigen Tabellennamen usw. versehen ist, tritt ja kein Fehler auf (deshalb auch keine Meldung), es wird halt nur nichts gefunden und daher gibt’s auch nichts, mit dem die while-Schleife gefüttert werden kann.

Kann es das sein?
 

GruenSein

Mitglied
Thread Starter
Mitglied seit
15.03.2007
Beiträge
346
leider nein, denn vor der while-schleife tut das script verschiedenes anderes. auch diese diversen ausgaben vorher werden nicht durchgeführt, wenn die schleife nicht auskommentiert ist. das komplette dokument ist dann auf quelltext-ebene leer (ganz am anfang sollte es wenigsten so sachen wie <head>...</head> ausgeben). UND keine fehlermeldung. :(
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
55.833
pack doch mal ein
error_log("fehler beim fetch: " . mysql_error());
hinter das while....
dann wird auch was geloggt...

beim einen fehler bei dem fetch ($result bleibt leer) wird ja while erst gar nicht ausgeführt...
vielleicht ein do while?
 

GruenSein

Mitglied
Thread Starter
Mitglied seit
15.03.2007
Beiträge
346
ich werd mich mal daran versuchen. ich verstehe halt auch schon nicht, dass keine fehlermeldung kommt. das ist doch nicht normal..
 

Darii

Aktives Mitglied
Mitglied seit
24.02.2004
Beiträge
2.087
Ansonsten versuch es mal mit einem

print_r(mysql_fetch_array($sql_data));
die();

vor dem while
 

oneOeight

Aktives Mitglied
Mitglied seit
23.11.2004
Beiträge
55.833
wenn das fetch_array nicht klappt, dann wird wohl schon vorher das result deiner query, dass du in $sql_data speicherst falsch sein...
schau doch auch mal was du in $sql_data hast, vielleicht ist da schon die fehlermeldung der query...
 

GruenSein

Mitglied
Thread Starter
Mitglied seit
15.03.2007
Beiträge
346
so mit der do schleife gehts. danke für den tipp. auch wenn cih nicht genau weiß, warum :)
 

goddess

Mitglied
Mitglied seit
26.02.2006
Beiträge
232
so mit der do schleife gehts. danke für den tipp. auch wenn cih nicht genau weiß, warum :)
Bei der do-schleife werden die Anweisungen zumindest einmal durchgeführt, bevor die Bedingung geprüft wird. Wenn du also vorher nie in die Schleife gekommen bist, dann wirds wohl daran liegen, dass die Bedingung nie TRUE war. Die Beschreibung von mysql_fetch_array sagt zum Rückgabewert:

Code:
Returns an array that corresponds to the fetched row, 
or [B]FALSE[/B] if there are no more rows.
Also gibts schon vorher ein Problem. Kann es sein, dass deine Query ein leeres Resultset zurückgeben kann?
 

GruenSein

Mitglied
Thread Starter
Mitglied seit
15.03.2007
Beiträge
346
ne das ist ja die sache: es ist ja nicht so, als wäre der code einfach normal durchgelaufen bist zu schleife und die wäre dann einfach übersprungen worden, weil das argument halt false war. mit der schleife macht das komplette script vor und nach der schleife NICHTS. ist ja jetzt auch egal, die do schleife geht ja..
 

der_Kay

Aktives Mitglied
Mitglied seit
02.09.2004
Beiträge
1.747
Bei PHP ist eh eine typeinschliessende Prüfung anzuraten:
PHP:
while ( FALSE !== ( $row = mysql_fetch_array ($result))) {...
 

ThaHammer

Aktives Mitglied
Mitglied seit
01.06.2004
Beiträge
3.304
Ha Ha! Genau dasselbe hatte ich erst heute. Irgendwann bin ich drauf gekommen, das der DB Login komplett fehlte.
Deshalb gabs immer kein $result und ne leere Seite!
 

tschloss

Aktives Mitglied
Mitglied seit
14.04.2007
Beiträge
1.246
Wenn gar kein Output kommt, dann kann es daran liegen, dass
a) Ausgabepufferung in den PHP EInstellungen aktiviert ist (d.h. der gesamte Output kommt erst am Schluß oder mit einem flush)
b) Fehlermeldungen qua PHP-Einstellungen nicht in den Ausgabestrom wandern sondern in den Log (des Apachen/Webservers).

Ich meine, vlt. hat sich irgendwas am Setup bei deinem Hoster verändert und due hast nun einen Fehler und andere PHP-Konfigs.

Nur so ne Idee.

VG
Thomas
 
Oben