Olá Flávia, tive o mesmo problema e não consegui solucionar, então eu criei um Try/catch (que é praticamente um else if para tratar erros.
Ficou assim:
$senha = gerarHash($senha1);
$q = "INSERT INTO usuarios (usuario,nome,senha,tipo) VALUES ('$usuario','$nome','$senha','$tipo')";
try{
if($banco->query($q)){
echo msg_sucesso("Usuário $usuario cadastrado com sucesso!");
}
}catch (Exception $ex){
echo msg_erro("Erro ao cadastrar usuário!");
}