6
respostas

Porque usar um array para receber outro array com os valores da função mysqli_query?

No código abaixo se a variável $resultado já recebe um array, com as linhas do banco, retornado pela função mysqli_query($conexao, $query) porque tenho que usar o while para para jogar os valores do array $resultado para o array $categoria?

<?php

function listaCategorias($conexao) {
    $categorias = array();
    $query = "select * from categorias";
    $resultado = mysqli_query($conexao, $query);
    while($categoria = mysqli_fetch_assoc($resultado)) {
        array_push($categorias, $categoria);
    }
    return $categorias;
}
6 respostas

Daniel,

faz um tempo que não mexo com php mas, se não me falha a memória, a função mysqli_query() retorna um mysqli_result (um tipo de resultset). Como a função listaCategorias() precisa retornar uma lista de categorias, há a necessidade de se declarar um array e populá-lo com os dados (registros) obtidos no mysqli_result. Daí, quem faz, de fato, a aplicação dos dados numa array associativa é a função mysqli_fetch_assoc(), que recebe o resultset (mysqli_result).

Espero ter ajudado.

Abraço.

Olá, Daniel.

Como o Manoel falou, o que o mysqli_query() retorna é um resource do tipo mysqli_result. Este contém todos os resultados do seu select, mas não é um array.

O mysqli_fetch_assoc() recebe um mysqli_result, e te dá um array associativo contendo os dados da próxima linha desse resultado.

Por isso o while. Ele percorre o resultado enquanto houver uma "próxima linha", e vai preenchendo o array com os dados corretos.

Quando todas as linhas forem percorridas, mysqli_fetch_assoc() retornará null, que será interpretado como false pelo while, então o array estará completo.

Espero ter esclarecido um pouco mais. Abraços e bons estudos.

Perguntei isso porque não utilizei o while para popular o array. Ao invés disso, usei um Foreach para percorrer o valor da variável $resultado e imprimir na página os valores retornados pelo mysqli_query() e deu certo.

Alguém mais se prontifica a me explicar?

Porque você pode precisar manipular seu array. Já que não é o caso, se é apenas uma listagem mesmo, não tem problema nenhum fazer com o foreach. Mas se você precisasse filtrar, ordenar, mapear..., não conseguiria desta forma, entendeu?

Ah! Sim... Entendido. Gratidão.

Fala, Daniel!

Que bom que deu pra entender!

Se tiver tudo certo, você pode marcar o tópico como resolvido, pra galera que tiver com a mesma dúvida poder encontrar o tópico com a resposta.

Abraço.