PHP 8.5.0 Alpha 2 available for testing

mysqli_result::fetch_assoc

mysqli_fetch_assoc

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_assoc -- mysqli_fetch_assocRecupera la siguiente fila de un conjunto de resultados como un array asociativo

Descripción

Estilo orientado a objetos

public mysqli_result::fetch_assoc(): array|null|false

Estilo procedimental

mysqli_fetch_assoc(mysqli_result $result): array|null|false

Devuelve una fila de datos del conjunto de resultados y la retorna como un array asociativo. Cada llamada posterior a esta función retornará la siguiente fila en el conjunto de resultados, o null si no hay más filas.

Si dos o más columnas del resultado tienen el mismo nombre, la última columna tendrá prioridad y sobrescribirá todos los datos anteriores. Para acceder a múltiples columnas con el mismo nombre, puede utilizarse mysqli_fetch_row() para recuperar el array indexado numéricamente o pueden utilizarse alias en la lista de selección de la consulta SQL para dar nombres diferentes a las columnas.

Nota: Los nombres de los campos devueltos por esta función son sensibles a la case.

Nota: Esta función define los campos NULL al valor PHP null.

Parámetros

result

Solo estilo procedimental: Un objeto mysqli_result devuelto por mysqli_query(), mysqli_store_result(), mysqli_use_result() o mysqli_stmt_get_result().

Valores devueltos

Devuelve un array asociativo que representa la fila recuperada, donde cada clave del array representa el nombre de una de las columnas del conjunto de resultados, null si no hay más filas en el conjunto de resultados, o false si ocurre un error.

Ejemplos

Ejemplo #1 Ejemplo mysqli_result::fetch_assoc()

Estilo orientado a objetos

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER BY ID DESC";

$result = $mysqli->query($query);

/* fetch associative array */
while ($row = $result->fetch_assoc()) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

Estilo procedimental

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER BY ID DESC";

$result = mysqli_query($mysqli, $query);

/* fetch associative array */
while ($row = mysqli_fetch_assoc($result)) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

Los ejemplos anteriores mostrarán algo similar a :

Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)

Ejemplo #2 Comparación del uso de mysqli_result iterator y mysqli_result::fetch_assoc()

mysqli_result puede ser iterado utilizando un foreach. El conjunto de resultados siempre será iterado desde la primera fila, independientemente de la posición actual.

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$query = 'SELECT Name, CountryCode FROM City ORDER BY ID DESC';

// Utiliza un iterador
$result = $mysqli->query($query);
foreach (
$result as $row) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

echo
"\n==================\n";

// No utiliza iterador
$result = $mysqli->query($query);
while (
$row = $result->fetch_assoc()) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

Resultado del ejemplo anterior es similar a :

Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)

==================
Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)

Ver también

add a note

User Contributed Notes 3 notes

up
87
Miller
11 years ago
I often like to have my results sent elsewhere in the format of an array (although keep in mind that if you just plan on traversing through the array in another part of the script, this extra step is just a waste of time).

This is my one-liner for transforming a mysqli_result set into an array.
<?php
$sql
= new MySQLi($host, $username, $password, $database);

$result = $sql->query("SELECT * FROM `$table`;");
for (
$set = array (); $row = $result->fetch_assoc(); $set[] = $row);
print_r($set);
?>

Outputs:
Array
(
[0] => Array
(
[id] => 1
[field2] => a
[field3] => b
),
[1] => Array
(
[id] => 2
[field2] => c
[field3] => d
)
)

I use other variations to adapt to the situation, i.e. if I am selecting only one field:
<?php
$sql
= new MySQLi($host, $username, $password, $database);
$result = $sql->query("SELECT `field2` FROM `$table`;");
for (
$set = array (); $row = $result->fetch_assoc(); $set[] = $row['field2']);
print_r($set);
?>
Outputs:
Array
(
[0] => a
[1] => c
)

Or, to make the array associative with the primary index (code assumes primary index is the first field in the table):
<?php
$sql
= new MySQLi($host, $username, $password, $database);
$result = $sql->query("SELECT * FROM `$table`;");
for (
$set = array (); $row = $result->fetch_assoc(); $set[array_shift($row)] = $row);
print_r($set);
?>
Outputs:
Array
(
[1] => Array
(
[field2] => a
[field3] => b
),
[2] => Array
(
[field2] => c
[field3] => d
)
)
up
28
james dot phx at gmail dot com
13 years ago
IMPORTANT NOTE:

If you were used to using code like this:

<?php
while(false !== ($row = mysql_fetch_assoc($result)))
{
//...
}
?>

You must change it to this for mysqli:

<?php
while(null !== ($row = mysqli_fetch_assoc($result)))
{
//...
}
?>

The former will cause your script to run until max_execution_time is reached.
up
1
Enrique Garcia
2 years ago
There is a difference between MariaDB and MySQL(>5.4) whether the input parameter (mysqli object) has data or is empty (it comes from a previus query).
-MariaDB: you get an exception:
Fatal error: Uncaught TypeError: mysqli_fetch_assoc(): Argument #1 ($result) must be of type mysqli_result
-MySQL: you can continue, in spite of not having data in the mysqli object.
To Top