mysqli_result::fetch_assoc

mysqli_fetch_assoc

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_assoc -- mysqli_fetch_assoc — RĂ©cupĂšre la ligne suivante d'un ensemble de rĂ©sultats sous forme de tableau associatif

Description

Style orienté objet

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

Style procédural

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

Retourne une ligne de données de l'ensemble de résultats et la renvoie sous forme de tableau associatif. Chaque appel ultérieur à cette fonction renverra la ligne suivante dans l'ensemble de résultats, ou null s'il n'y a plus de lignes.

Si deux ou plusieurs colonnes du rĂ©sultat ont le mĂȘme nom, la derniĂšre colonne sera prioritaire et Ă©crasera toutes les donnĂ©es prĂ©cĂ©dentes. Pour accĂ©der Ă  plusieurs colonnes portant le mĂȘme nom, la mysqli_fetch_row() peut ĂȘtre utilisĂ©e pour rĂ©cupĂ©rer le tableau indexĂ© numĂ©riquement ou des alias peuvent ĂȘtre utilisĂ©s dans la liste de sĂ©lection de la requĂȘte SQL pour donner des noms diffĂ©rents aux colonnes.

Note: Les noms des champs retournés par cette fonction sont sensibles à la casse.

Note: Cette fonction définit les champs NULL à la valeur PHP null.

Liste de paramĂštres

result
Style procédural uniquement : Un objet mysqli_result retourné par mysqli_query(), mysqli_store_result(), mysqli_use_result(), ou mysqli_stmt_get_result().

Valeurs de retour

Renvoie un tableau associatif reprĂ©sentant la ligne extraite, oĂč chaque clĂ© du tableau reprĂ©sente le nom d'une des colonnes du jeu de rĂ©sultats, null s'il n'y a plus de lignes dans le jeu de rĂ©sultats, ou false si une erreur survient.

Exemples

Exemple #1 Exemple mysqli_result::fetch_assoc()

Style orienté objet

<?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);

/* RécupÚre un tableau associatif */
while ($row = $result->fetch_assoc()) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

Style procédural

<?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);

/* RécupÚre un tableau associatif */
while ($row = mysqli_fetch_assoc($result)) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

Les exemples ci-dessus vont afficher quelque chose de similaire Ă  :

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

Exemple #2 Comparaison de l'usage de mysqli_result iterator et mysqli_result::fetch_assoc()

mysqli_result peut ĂȘtre itĂ©rĂ© en utilisant un foreach. Le jeu de rĂ©sultats sera toujours itĂ©rĂ© Ă  partir de la premiĂšre ligne, quel que soit la position actuelle.

<?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';

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

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

// N'utilise pas d'itérateur
$result = $mysqli->query($query);
while (
$row = $result->fetch_assoc()) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

Résultat de l'exemple ci-dessus est similaire à :

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)

Voir aussi

  • mysqli_fetch_array() - RĂ©cupĂšre la ligne suivante d'un ensemble de rĂ©sultats sous forme de tableau associatif, numĂ©rique ou les deux
  • mysqli_fetch_column() - RĂ©cupĂšre une seule colonne de la ligne suivante d'un jeu de rĂ©sultats
  • mysqli_fetch_row() - RĂ©cupĂšre une ligne de rĂ©sultat sous forme de tableau indexĂ©
  • mysqli_fetch_object() - Retourne la ligne suivante d'un ensemble de rĂ©sultats sous forme d'objet
  • mysqli_query() - ExĂ©cute une requĂȘte sur la base de donnĂ©es
  • mysqli_data_seek() - DĂ©place le pointeur interne de rĂ©sultat
add a note

User Contributed Notes 3 notes

up
88
Miller ¶
12 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
26
james dot phx at gmail dot com ¶
14 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
2
Enrique Garcia ¶
3 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.