Bueno, yo veo problemas al no limpiar las variables en la consulta porque realmente no sabes los valores que le van a asignar a tus variables, yo siempre limpio mis variables utilizando sprintf el cual me devuelve una cadena formateada de acuerdo al tipo de dato que le estoy especificando por ejemplo si pongo %d estoy pidiendo que me devuelva un entero, si pongo %s estoy pidiendo que me devuelva una cadena, y adicionalmente uso la función mysql_real_escape_string() la cual coloca barras invertidas a los caracteres especiales para que no los tome en cuenta como parte de la consulta por ejemplo el apostrofe '.
Ejemplo: