That's generally the error you get if you leave off the or die clause. mysql_query returns FALSE if the query failed, which will then generate that warning when you hit the while loop.
But you have an or die clause, so that's a bit puzzling.
So I can only think of a couple things to try to verify:
Maybe there is a case where mysql_query returns false, but doesn't trigger or die. That would be odd, but a quick test should verify if that is happening:
Add this line right after mysql_query:
if(!$result) die("Yuck:".mysql_error());
If you get the Yuck message, something is odd, but you should at least see the error message.
If you don't get the yuck message, then your loop really should execute (at least once).
Add an Echo statement as the first line of your while loop. Does the loop execute at least once?
One thing that comes to mind is that you might be modifying $result within your while loop. So the loop works the first time, but not the second. Knowing if the loop runs at least once will tell you if that is happening.
I am curious about 1 thing. 148 more fields? That is a ***LOT*** of columns for a database table. I've never worked on a database with that many columns in 1 table, and I've worked on some reasonably complex stuff. That's not to say that there aren't legit cases where that would make sense, but it does raise a yellow flag.
Do any of your columns have numbers as part of the name? num1, num2, num3, etc? Something is wrong if you are doing that.
You posted a question not long ago about creating index names dynamically. That's another yellow flag (actually, that one is more of a red flag).
So...just curious...what exactly is in these 149 columns? There might be better ways of doing things.