merkwürdiges php-problem

G

GruenSein

Aktives Mitglied
Thread Starter
Dabei seit
15.03.2007
Beiträge
345
Reaktionspunkte
32
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?
 
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?
 
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. :(
 
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?
 
ich werd mich mal daran versuchen. ich verstehe halt auch schon nicht, dass keine fehlermeldung kommt. das ist doch nicht normal..
 
Ansonsten versuch es mal mit einem

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

vor dem while
 
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...
 
  • Gefällt mir
Reaktionen: GruenSein
so mit der do schleife gehts. danke für den tipp. auch wenn cih nicht genau weiß, warum :)
 
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?
 
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..
 
Bei PHP ist eh eine typeinschliessende Prüfung anzuraten:
PHP:
while ( FALSE !== ( $row = mysql_fetch_array ($result))) {...
 
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!
 
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
 
Zurück
Oben Unten