$stmt->bind_param() não verifica as variáveis fornecidas para um determinado tipo, apenas as converte no tipo especificado. E sua string 'aaaaaaaa' é convertida em um valor int:0. É assim que o php faz.
A instrução de inserção do banco de dados é o lugar errado para verificar se suas variáveis contêm valores úteis/corretos. Faça isso antes e só tente inseri-los, se suas validações funcionarem.
Para fazer a validação para um int, você pode usar a função php is_numeric() ou is_int().