W3docs

fetch_row

Aprenda a usar mysqli_fetch_row() em PHP para buscar linhas de um resultado MySQLi como array enumerado, com exemplos e dicas práticas.

A função mysqli_fetch_row() busca uma linha de um conjunto de resultados MySQLi e a retorna como um array enumerado — um array simples indexado numericamente onde $row[0] é a primeira coluna selecionada, $row[1] a segunda, e assim por diante. Esta página aborda sua sintaxe e valor de retorno, como percorrer um conjunto de resultados em loop, os estilos procedural e orientado a objetos, quando preferí-la em relação às alternativas e os pontos de atenção.

Sintaxe

// Procedural style
mysqli_fetch_row(mysqli_result $result): array|null|false

// Object-oriented style
$result->fetch_row(): array|null|false

O único argumento é $result — um objeto de resultado retornado por mysqli_query(), mysqli_store_result() ou mysqli_use_result().

Valor de retorno

SituaçãoValor de retorno
Uma linha foi lidaUm array enumerado ($row[0], $row[1], …)
Sem mais linhasnull
Falhafalse

Cada chamada avança um cursor interno para a próxima linha, o que faz com que funcione perfeitamente dentro de um loop while. Os valores das colunas retornam como strings (ou null para SQL NULL), independentemente do tipo SQL da coluna, a menos que você habilite a conversão de tipos nativos via mysqlnd.

Exemplo básico: percorrendo linhas em loop

Como mysqli_fetch_row() retorna null quando as linhas se esgotam, a condição do loop termina automaticamente:

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

if (mysqli_connect_errno()) {
    die("Connection failed: " . mysqli_connect_error());
}

$result = mysqli_query($mysqli, "SELECT id, name FROM users");

if ($result) {
    while ($row = mysqli_fetch_row($result)) {
        // $row[0] = id, $row[1] = name (in the order they were SELECTed)
        printf("%s: %s\n", $row[0], $row[1]);
    }
    mysqli_free_result($result);
} else {
    echo "Query failed: " . mysqli_error($mysqli);
}

mysqli_close($mysqli);
?>

Conectamos, verificamos um erro de conexão e depois executamos um SELECT. Dentro do loop while, cada chamada a mysqli_fetch_row() retorna a próxima linha como um array indexado na ordem do SELECT — é exatamente por isso que selecionar colunas explícitas (id, name) em vez de SELECT * é recomendado: isso define com precisão qual índice corresponde a qual coluna.

Dica: Sempre chame mysqli_free_result() quando terminar com um conjunto de resultados para liberar sua memória, especialmente em scripts de longa duração.

Estilo orientado a objetos

A mesma lógica com a API OOP, que a maioria do código moderno utiliza:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Connection failed: " . $mysqli->connect_error);
}

$result = $mysqli->query("SELECT id, name FROM users");

while ($row = $result->fetch_row()) {
    printf("%s: %s\n", $row[0], $row[1]);
}

$result->free();
$mysqli->close();
?>

Quando usar mysqli_fetch_row()

Recorra a mysqli_fetch_row() quando:

  • Você selecionar um conjunto pequeno e fixo de colunas e preferir acesso compacto por índice.
  • Estiver copiando ou transmitindo linhas brutas e os nomes das colunas não importarem.
  • Quiser o fetch com menor sobrecarga possível (nenhum array de chaves associativas é criado).

Prefira uma das alternativas quando nomes ou objetos forem mais convenientes:

Pontos de atenção comuns

  • Os índices seguem a ordem do SELECT, não a ordem da tabela. SELECT * torna $row frágil porque adicionar uma coluna à tabela desloca os índices silenciosamente. Selecione colunas explicitamente.
  • Os valores são strings. Uma coluna numérica retorna como "42", não 42. Faça o cast ((int) $row[0]) se precisar de um número real.
  • null vs. false. Um loop while trata ambos como falsy, então termina corretamente nos dois casos — mas se você buscar uma única linha manualmente, distinga "sem mais linhas" (null) de "erro" (false).
  • Buffered vs. unbuffered. Com mysqli_use_result() (unbuffered), você deve buscar todas as linhas antes de executar outra consulta na mesma conexão.

Para uma visão geral de conexão e consultas, consulte a visão geral do MySQLi e mysqli_connect().

Prática

Prática
Quais das afirmações a seguir são verdadeiras sobre a função PHP mysqli_fetch_row()?
Quais das afirmações a seguir são verdadeiras sobre a função PHP mysqli_fetch_row()?
Was this page helpful?