Pour résumer :  
 
quand tu crées une requête SQL, ça marche comme suit :
 
Code :
 - $requete = "select  champ1,
 -                     champ2
 -             from
 -                     matable
 -             where
 -                     champ3 = '$variable1'
 -             and
 -                     champ4 = $variable2";
 
  | 
 
où champ3 est de type char et champ4 numérique.
 
De manière générale, ce message arrive quand ta requête est mal formulée, ou quand tu fais une erreur dans le $row["champx"].
 
Et donc : quand tu exécutes la requête, utilise la fonction die :
 
Code :
 - $reponse = mysql_query($requete) or die("$requete" );
 
  | 
 
plutôt que
Code :
 - $reponse = mysql_query($requete) or die(mysql_error());
 
  | 
 
Ca te permettra de voir si ta requête est bien formulée, et si tu veux voir l'erreur, tu peux toujours la copier/coller dans phpMyAdmin