4
respostas

Por que não posso retornar direto de mysqli_query

Boa noite. Na função buscaProduto por que eu não posso usar o seguinte código:

function buscaProduto($conexao,$id){ $query = "select * from produtos where id='{$id}'"; return(mysqli_query($conexao,$query)); }

Por que eu não posso retornar o resultado da query diretamente? Por que eu devo armazenar o resultado em uma variável e usar a função mysqli_fetch_assoc($variavel) já que eu sei que só há um resultado para a query?

4 respostas

Bom dia, Leonardo! Tudo bem?

Se você retornar o somente o mysqli_query($conexao, $query), você vai receber o objeto mysqli_result, como está na documentação.

Porém, esse, provavelmente, não é o objeto que você quer trabalhar. Por isso salvamos em uma variável e utilizamos a funçãomysqli_fetch_assoc, que vai te retornar uma ou mais linhas do banco em um array associativo.

O fato de salvar o retorno de mysqli_query($conexao, $query)em uma variável é para manter seu código mais organizado.

Dá uma olhada nessas funções lá na documentação do PHP.

Eu também tive essa mesma dúvida ao passar por este código.

Então mesmo a consulta ao banco trazendo apenas uma linha, o conteúdo da variável $resultado é diferente daquilo que é retornado utilizando o "fetch_assoc"! Isso?

Tinha entendido que o "fetch_assoc" seria apenas para separar os vários resultados encontrados pela consulta.

function buscaProduto($conexao, $id) {
    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);
    return mysqli_fetch_assoc($resultado);
}

O mysql_query ou mysqli_query vão retornar no caso de uma consulta ao banco uma variável do tipo "resource". No caso deste exemplo do curso, a consulta retorna apenas 1 registro.

Para poder usar os dados da consulta, você precisa extrair a linha de resultados da variável "resource".

Você pode fazer isso usando o mysqli_fetch_array, que transforma a linha num array, ou o mysqli_fetch_assoc que transforma o resultado num array associativo.

Caso a consulta fosse de toda a base de produtos ou filtrada por algum critério, você poderia usar um WHILE para varrer todas as linhas de resultados, e para cada uma delas, usar um dos comandos acima.

Muito bom Daniel, bastante esclarecedor. (y)