Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

mysqli_fetch_assoc não retorna NULL

Eai pessoal, estou com o seguinte problema:

o retorno da minha função Login não retorna NULL quando não encontra o registro. Não aparecem erros, pois a query foi concluída, apenas não retorna NADA. Como forçar a retornar NULL caso não encontre registro?

OBS: A função e a query funcionam, pois quando encontra o usuário, ele retorna certinho. Estou usando o MAMP no MAC. Efetuei o deploy pro ar e no servidor também ocorre o mesmo problema. Já troquei para mysqli_fetch_array e mysqli_fetch_object e todos ocorrem o mesmo erro.

Php login:

<?

include 'conecta.php'; include 'funcoes.php';

$email = $_POST['email']; $senha = $_POST['senha'];

$usuario = Login($conexao,$email,$senha) or die("erro");

var_dump($usuario);

if ($usuario == NULL){

echo"";

}else{

echo""; }

Php funcoes:

<?

function Login($conexao,$email,$senha){ $validaSenha = md5($senha); $query = "SELECT * from tb_usuario WHERE email = '{$email}' AND senha = '{$validaSenha}'"; $sql = mysqli_query($conexao, $query); $resultado = mysqli_fetch_assoc($sql); return $resultado; }

4 respostas

Tente fazer o seguinte ajuste em sua função de login

function Login($conexao,$email,$senha){ 
    $validaSenha = md5($senha); 
    $query = "SELECT * from tb_usuario WHERE email = '{$email}' AND senha = '{$validaSenha}'"; 
    $sql = mysqli_query($conexao, $query); 
    $resultado = NULL;
    if (mysqli_num_rows($sql) > 0){
        $resultado = mysqli_fetch_assoc($sql); 
    }
    return $resultado; 
}

Também não deu..o problema é o seguinte..ele até CONTA as linhas no mysqli_num_rows e no if estaria certo, mas ele a função simplesmente não consegue me retornar NULL. Entende? Eu fiz este teste:

function Login($conexao,$email,$senha){ $validaSenha = md5($senha); $query = "SELECT * from tb_usuario WHERE email = '{$email}' AND senha = '{$validaSenha}'"; $sql = mysqli_query($conexao, $query); $resultado = 0; if (mysqli_num_rows($sql) > 0){ $resultado = mysqli_fetch_assoc($sql); } return $resultado; }

Ele retorna 0. Mas se eu coloco NULL justamente para bater no php eme não me retorna nada, como se eu não pudesse retornar NULL pela função.

Tente da seguinte maneira

function Login($conexao,$email,$senha){ 
    $validaSenha = md5($senha); 
    $query = "SELECT * from tb_usuario WHERE email = '{$email}' AND senha = '{$validaSenha}'"; 

    return mysqli_num_rows(mysqli_query($conexao,$query));
}

Funcionou ?

solução!

Consegui pessoal !!!

A questão é a seguinte: a nova versão do MAMP vem com uma série de funcionalidades desativadas ou com outro parâmetro. Neste caso, o MAMP reconhece o retorno da query como VAZIA, ou seja, == "". Por isso eu não posso usar a validação com o null ( pelo menos no mamp aqui ). Então, alterei para == "" e funcionou certinho e por isso não aparecia erros.

Estou tendo que ativar várias coisas, como report error, buffering, cache e cookies.

Abraço e valeu pela ajuda.