$stmt->bind_param() no verifica las variables dadas para un cierto tipo, solo las convierte en el tipo especificado. Y su cadena 'aaaaaaa' se convierte en un valor int:0. Así es como lo hace php.
La declaración de inserción de la base de datos es el lugar equivocado para verificar si sus variables contienen valores útiles/correctos. Haz eso antes y solo intenta insertarlos, si tus validaciones funcionan.
Para hacer la validación de un int, puede usar la función php is_numeric() o is_int().