1
resposta

Porque isso retorna num loop infinito?

$produto = mysqli_fetch_assoc($selecao);

while($produto) {
echo $produto["nome"];
}

Eu não entendi muito bem o funcionamento da função mysqli_fetch_assoc(). Pelo o que eu entendi ele pega os itens da tabela que foi selecionada pela query de SELECT FROM, porém, não entendi o que ela retorna especificamente/seu funcionamento por baixo dos panos.

Alguém poderia me explicar? (Já tentei ver a documentação através desse link: https://secure.php.net/manual/pt_BR/mysqli-result.fetch-assoc.php, mas não me ajudou muito)

1 resposta

Raphael, Vamos supor que vc crie a seguinte query e ela retorne uma tabela com 3 registros

$query = "SELECT * FROM produtos";
$resultado = mysqli_query($conexao,$query);

$produto1 = mysqli_fetch_assoc($resultado);
$produto2 = mysqli_fetch_assoc($resultado);
$produto3 = mysqli_fetch_assoc($resultado);

Cada vez que você utiliza a função ela le a proxima linha da tabela que a sua consulta retornou. Nesse caso eu disse que a query retornou apenas 3 registros entao não teriamos problema em escrever da maneira que fiz. Mas e se a nossa consulta retornasse 1000 registros? ou entao nós nao tivessemos a certeza de quantos registros a consulta iria retornar, certamente precisamos de uma maneira de automatizar isso.

Normalmente utilizamos o seguinte algoritmo

$query = "SELECT * FROM produtos";
$resultado = mysqli_query($conexao,$query);

while($produto = mysqli_fetch_assoc($resultado)){
    //Regra do negócio
}

Dessa maneira, será executado o loop enquanto houverem registros na consulta, quando a função executar e nao encontrar mais nenhum registro ela simplesmente retorna um "false" e sai do loop