W3docs

fetch_assoc

Aprende a usar mysqli_fetch_assoc() en PHP para obtener filas de un resultado MySQLi como array asociativo con claves por nombre de columna.

La función mysqli_fetch_assoc() obtiene una fila de un conjunto de resultados MySQLi y la devuelve como un array asociativo, donde cada clave es el nombre de una columna de tu consulta. Esta página explica su sintaxis, valor de retorno, cómo se comporta dentro de un bucle, los errores más comunes y en qué se diferencia de otras funciones de obtención de datos.

Qué hace mysqli_fetch_assoc()

Cuando ejecutas una consulta SELECT, MySQLi te devuelve un conjunto de resultados — un puntero a las filas que la base de datos encontró. mysqli_fetch_assoc() extrae la siguiente fila de ese conjunto y te la entrega como un array con claves de nombre de columna:

$row = mysqli_fetch_assoc($result);
echo $row['email']; // access a value by its column name

Cada llamada avanza un cursor interno, por lo que llamar a la función repetidamente recorre las filas de una en una. Cuando no quedan más filas, devuelve null.

Sintaxis

mysqli_fetch_assoc(mysqli_result $result): array|null|false
ParteSignificado
$resultUn object de resultado devuelto por mysqli_query() (o mysqli_store_result() / mysqli_use_result()).
RetornoUn array asociativo con la fila obtenida, null cuando no hay más filas, o false en caso de error.

Si dos columnas de tu SELECT comparten el mismo nombre (por ejemplo, un JOIN que devuelve dos columnas id), solo la última sobrevive en el array — usa alias de columna (SELECT a.id AS user_id) para conservar ambas.

Obtener filas en un bucle

Casi siempre se llama a mysqli_fetch_assoc() dentro de un bucle while. Como devuelve null (valor falsy) tras la última fila, el bucle termina por sí solo:

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

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

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

if ($result) {
    while ($row = mysqli_fetch_assoc($result)) {
        echo $row['id'] . ": " . $row['name'] . " ($" . $row['price'] . ")\n";
    }
    mysqli_free_result($result);
} else {
    echo "Query failed: " . mysqli_error($mysqli);
}

mysqli_close($mysqli);
?>

Comprobamos la conexión con mysqli_connect_errno(), ejecutamos la consulta y luego iteramos. Cada iteración asigna la siguiente fila a $row; cuando el conjunto se agota, la asignación devuelve null, la condición del while se vuelve falsa y el bucle se detiene. mysqli_free_result() libera la memoria que ocupa el conjunto de resultados una vez que hemos terminado.

Ver el array que devuelve

No necesitas una base de datos para entender la estructura de una fila. El fragmento a continuación construye un array idéntico al que devolvería una sola llamada a mysqli_fetch_assoc() y lo imprime, para que puedas ver las claves de nombre de columna:

<?php
// This is the structure mysqli_fetch_assoc() hands back for one row.
$row = [
    "id"    => 1,
    "name"  => "Keyboard",
    "price" => 29.99,
];

echo "Product: " . $row["name"] . "\n";
echo "Price:   $" . $row["price"] . "\n";

print_r($row);
?>

Al ejecutarlo, se imprime:

Product: Keyboard
Price:   $29.99
Array
(
    [id] => 1
    [name] => Keyboard
    [price] => 29.99
)

Errores comunes

  • Llamarla sobre una consulta fallida. mysqli_query() devuelve false en caso de error, y pasar false a mysqli_fetch_assoc() no es válido. Comprueba siempre $result primero, como en el bucle anterior.
  • Olvidar que solo devuelve una fila. Una sola llamada te da la siguiente fila, no toda la tabla. Usa un bucle para leerlas todas.
  • Usar == en lugar de asignación. El bucle usa $row = mysqli_fetch_assoc($result) (asignación). Escribir == nunca avanzaría el cursor y podría provocar un bucle infinito.
  • Tratarla como acceso numérico. Usa $row['name'], no $row[0]. Para claves numéricas usa mysqli_fetch_row(); para ambas, usa mysqli_fetch_array().

Cómo se compara con otras funciones de obtención de datos

FunciónDevuelve cada fila como
mysqli_fetch_assoc()Array asociativo ($row['name'])
mysqli_fetch_row()Array numérico ($row[0])
mysqli_fetch_array()Claves tanto asociativas como numéricas
mysqli_fetch_object()Un object ($row->name)
mysqli_fetch_all()Un array con todas las filas a la vez

Usa mysqli_fetch_assoc() cuando quieras un código legible y autodocumentado que haga referencia a las columnas por nombre y proceses las filas de una en una.

Conclusión

mysqli_fetch_assoc() es la función predeterminada para leer un conjunto de resultados MySQLi como arrays asociativos con claves de nombre de columna. Combínala con un bucle while y una comprobación rápida de que la consulta se realizó correctamente, y podrás iterar los conjuntos de resultados de forma segura. Para más información, consulta PHP MySQLi, arrays asociativos y el bucle while.

Práctica

Práctica
¿Qué hace la función fetch_assoc() en PHP?
¿Qué hace la función fetch_assoc() en PHP?
Was this page helpful?