Sorry, un pequeño error en la sugerencia!
debe ser
or die(mysql_error()) porque es una función y ahí se va a ver el error real.
Qué pasa si dejas en blanco uno de los campos numéricos?, digamos,
speaking... a la hora de armar la consulta será una cadena vacía, que MySQL tal vez interprete como NULL, pero si la columna no permite NULL, entonces por ahí viene el error.