Fatal error: Call to a member function fetch_array() on boolean in

Eu estava fazendo o meu login e deu esse erro, só que não consigo saber como arrumar, alguém pode me ajudar:
Segue o código:

<?php session_start(); include_once("conexao.php"); if((isset($_POST['email'])) && (isset($_POST['senha']))){ $email = ($_POST['email']); $senha = ($_POST['senha']); // $senha = md5($senha); $sql = "select * from usuario where email = '$email' and senha = '$senha'"; $result = $con -> query($sql); $resultado = $result->fetch_array(); if($result -> num_rows == 1){ header("Location: ../adm/adm.php"); } elseif($result -> num_rows != 1){ $_SESSION['loginErro'] = "Usuário ou senha inválidos vazio!!!"; header("Location: ../login.php"); } }else{ $_SESSION['loginErro'] = "Usuário ou senha inválidos esse!!!"; header("Location: ../login.php"); } ?>

Após essa linha coloque…

var_dump($result);

Se trouxer boolean, significa que sua query não foi executada com sucesso (precisa trazer um resource para o fetch_array funcionar)…

Dica: evite SQL dessa forma:

 $sql = "select * from usuario where email = '$email' and senha = '$senha'";

Isso está muito fácil de burlar o banco (sql injection), como um teste após essa linha coloque…

echo $sql;

E quando for fazer o login, no campo de senha adicione por exemplo ’ OR 1 = 1 e veja o que o sql imprime na tela…

Procure user PDO, assim você faz uma “limpeza” dos dados na hora de montar sua query (prepared statements) ou no mínimo filtre seu post assim…

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$senha = filter_input(INPUT_POST, 'senha');

Pesquise mais sobre essas funções (você pode aplicar filtros de números, textos, expressões regulares, etc…), elas ajudam muito a manter a segurança do seu código, espero ter ajudado