mysql_fetch_array

Transformation des résultats en tableau

09/12/2008 10 896 lectures 3.2/5 (5 votes) Sébastien Sougnez

La structure interne ainsi que le design d'AreaProg ont récemment été modifiés.
Suite à cela, le format de certains articles a été perturbé. Le problème est connu et en cours de résolution. Merci de votre compréhension.

Cette fonction est très pratique et vous l'utiliserez certainement très souvent. Comme nous l'avons vu dans un cours précédent, il est possbile de récupérer les valeurs des enregistrements revnoyés par un SELECT grâce à mysql_result. Le problème avec cette fonction est que si les enregistrements contiennent 40 colonnes et que vous désirez récupérer toutes les valeurs, cela devient vite fastidieux. Il existe donc la fonction mysql_fetch_array qui permet de convertir un enregistrement d'un jeu de résultat en tableau. Ce tableau sera soit identifié par des valeurs numériques, soit associatif, soit les deux. Mais voyons d'abord la syntaxe de cette fonction :
$tableau mysql_fetch_array($result, $result_type) 
Le premier argument de cette fonction est la ressource renvoyée par mysql_query tandis que le deuxième paramètre désigne de quel type sera le tableau renvoyé. Comme nous l'avons vu précédemment, voici les trois types de tableaux possibles : MYSQL_ASSOC : tableau associatif MYSQL_NUM : tableau numérique MYSQL_BOTH (par défaut) : tableaux associatif et numérique Passons à un exemple. Imaginez la table suivante :
Image
Commencez par simplement faire une sélection des noms et des prénoms de toutes les personnes :
<?php

	$db = mysql_connect("localhost", "root", "");

	$resultat = mysql_select_db("bdd", $db);

	$request = mysql_query('SELECT NOM, PRENOM FROM PERSONNES;', $db);

	while ($valeur = mysql_fetch_array($request, MYSQL_NUM))
	echo $valeur[0] . ' ' . $valeur[1] . '<br />';

?>
Si vous exécutez ce script, vous obtiendrez : <div style="padding:5px;border:1px solid black;"> Einstein Albert Eiffel Gustave Cage Nicolas </div> Comme vous le voyez cela a très bien fonctionné. En effet, mysql_fetch_array lit un enregistrement, le convertit dans le tableau valeur qui sera du type numérique grâce à MYSQL_NUM et ensuite, il avance le curseur d'un pas dans le jeu d'enregistrement renvoyé par le SELECT. C'est ainsi qu'il avance d'enregistrement en enregistrement et qu'il sort de la boucle une fois qu'il n'a plus d'enregistrement à lire. Voyons maintenant comment cela fonctionnerait avec MYSQL_ASSOC :
 <?php

	$db = mysql_connect("localhost", "root", "");

	$resultat = mysql_select_db("bdd", $db);

	$request = mysql_query('SELECT NOM, PRENOM FROM PERSONNES;', $db);

	while ($valeur = mysql_fetch_array($request, MYSQL_ASSOC))
	echo $valeur['NOM'] . ' ' . $valeur['PRENOM'] . '<br />';

?> 
Le résultat serait : <div style="padding:5px;border:1px solid black;"> Einstein Albert Eiffel Gustave Cage Nicolas </div> Comme vous le voyez, c'est bien plus clair avec un tableau associatif. Les clés du tableau seront le nom des champs sélectionnés dans votre requête SQL. Si deux colonnes portent le même nom, c'est le résultat de la dernière colonne qui sera récupéré. Vous pourrez récupérez la valeur de la première colonne grâce à son index numérique et MYSQL_BOTH. D'une manière générale, nous vous conseillons de toujours faire attention à ce qu'aucune colonne de vos requêtes ne porte le même nom, utilisez donc les alias SQL pour éviter cela. Regardez l'exemple suivant avec MYSQL_BOTH :
 <?php

	$db = mysql_connect("localhost", "root", "");

	$resultat = mysql_select_db("bdd", $db);

	$request = mysql_query('SELECT NOM, PRENOM FROM PERSONNES;', $db);

	while ($valeur = mysql_fetch_array($request))
	echo $valeur['NOM'] . ' ' . $valeur[1] . '<br />';

?> 
Encore une fois, le résultat sera le même.

Noter

Veuillez vous identifier ou vous inscrire pour donner une note à cet article.

Commentaires / Questions

Aucun commentaire.

Veuillez vous identifier ou vous inscrire pour réagir à cet article.

Avatar

Sébastien Sougnez

Envoyer un mail Site web Windows live messenger LinkedIn Twitter Facebook MVP Administrateur

2 points