Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

traiter un tableau de mysql_fetch_array

7 réponses
Avatar
Mihamina (R12y) Rakotomandimby
Bonjour,

Soit un truc ressemblant à ceci,
au fautes pres (c'est pas du cut/paste):

/////////////////////////////////////
$lignes=array();
$nblines= msql_num_rows($result);
for($i=0; $i < $nblines; i+=1)
{
$lignes[]=mysql_fetch_array($result);
}
//////////////////////////////////////

$lignes est un tableau avec des "doubles values":

$lignes[0] et $ligne['champ0'] ont la meme valeur
$lignes[1] et $ligne['champ1'] ont la meme valeur
$lignes[2] et $ligne['champ2'] ont la meme valeur
...
$lignes[n] et $ligne['champn'] ont la meme valeur

Ce qui fait qu'en fait j'ai un tableau deux fois trop grand et surtout, dont
je dois traiter cette redondance.
- Est-ce un comportement inévitable?
ou alors
- Comment traiter facilement cette redondance?
Merci d'avance.

7 réponses

Avatar
P'tit Marcel

$lignes[]=mysql_fetch_array($result);

$lignes est un tableau avec des "doubles values":
$lignes[0] et $ligne['champ0'] ont la meme valeur

Ce qui fait qu'en fait j'ai un tableau deux fois trop grand et surtout, dont
je dois traiter cette redondance.
- Est-ce un comportement inévitable?


non.

mysql_fetch_row et mysql_fetch_assoc sont tes amies


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Avatar
Pascal PONCET
$lignes[]=mysql_fetch_array($result);
$lignes est un tableau avec des "doubles values":
- Est-ce un comportement inévitable?


Salut,
Utilise plutôt "mysql_fetch_assoc()" et tu n'auras que la partie
associative du tableau.
Pascal

Avatar
thierry
Bonjour,
bonjour


Soit un truc ressemblant à ceci,
au fautes pres (c'est pas du cut/paste):
idem


/////////////////////////////////////
$lignes=array();
$nblines= msql_num_rows($result);
for($i=0; $i < $nblines; i+=1)
{
$lignes[]=mysql_fetch_array($result);
}
j'en déduis que tu cherches à obtenir un tableau

non associatif comportant toutes les lignes renvoyées
par la requête.
si j'ai faux, stop la lecture ici.

sinon je reviens à la charge avec PEAR et son package MDB2
ton code deviendrait alors
$ligne = $result->fetchAll(MDB2_FETCHMODE_ORDERED);

et encore la paramètre est optionnel selon ce qui précède dans le code

voilà

amicalement

thierry

Avatar
Mihamina Rakotomandimby (R12y)
thierry wrote:
/////////////////////////////////////
$lignes=array();
$nblines= msql_num_rows($result);
for($i=0; $i < $nblines; i+=1)
{
$lignes[]=mysql_fetch_array($result);
}
j'en déduis que tu cherches à obtenir un tableau

non associatif comportant toutes les lignes renvoyées
par la requête.


Euh... En gros, chaque enregistrement est une personne, et les champs
sont "nom" , "prénom", "date de naissance",...

J'ai déjà une fonction qui m'affiche un tableau de tableau, mais le fait que
l'information soit redondante défigure l'édifice...
Bref, Pascal et Marcel m'ont indiqué ce que je devais savoir, et j'en
profite pour tous vous remercier.


Avatar
Jean-Marc Molina
Mihamina (R12y) Rakotomandimby wrote:
$lignes=array();
$nblines= msql_num_rows($result);
for($i=0; $i < $nblines; i+=1)
{
$lignes[]=mysql_fetch_array($result);
}


Ce code est tellement abominable que je me dois d'intervenir. Voir la
section "mysql_fetch_array" [1] du manuel PHP pour savoir comment utiliser
la fonction. Développer en PHP ça ne s'improvise, une bonne pratique au
début est de toujours consulter le manuel quand on fait appel à une
fonction.

Sinon bannir cette fonction et utiliser mysql_fetch_assoc si on aime les
crochets ou mysql_fetch_object si on préfère les flèches :)

Notes :
* [1] http://www.php.net/manual/en/function.mysql-fetch-array.php

Avatar
Didier
Mihamina (R12y) Rakotomandimby wrote:

$lignes=array();
$nblines= msql_num_rows($result);
for($i=0; $i < $nblines; i+=1)
{
$lignes[]=mysql_fetch_array($result);
}



Ce code est tellement abominable
Est-ce que tu peux expliquer pourquoi aux nombreux débutants amateurs

que nous sommes ?
Merci.
Didier.


Avatar
P'tit Marcel
Mihamina (R12y) Rakotomandimby wrote:
$lignes[]=mysql_fetch_array($result);
Ce code est tellement abominable

Est-ce que tu peux expliquer pourquoi aux nombreux débutants amateurs

que nous sommes ?


Je suppose que JMM réagissait à l'emploi de mysql_fetch_array avec un
seul paramètre. C'est souvent générateur de comportement imprévu du
script. Par exemple ce script va afficher 4 colonnes et non deux :

$sql = 'select nom, prenom from utilisateur order by nom';
$result = mysql_query($sql) or die ('erreur SQL');
echo '<table>';
while($ligne=mysql_fetch_array($result)) {
echo '<tr><td>', implode('</td><td>', $ligne), '</td></tr>';
}
echo '</table>';

Il vaut mieux employer la syntaxe étendue :
mysql_fetch_array($result, MYSQL_ASSOC) voire mysql_fetch_assoc($result)
ou bien
mysql_fetch_array($result, MYSQL_NUM) voire mysql_fetch_row($result)
ou bien
mysql_fetch_object($result) pour les adeptes de la POO

je préfère personnellement la première approche qui fait manipuler des
noms de variables signifiants ($ligne['num_telephone'] au lieu de
$ligne[4] par exemple), mais elle impose de donner un nom aux champs
calculés présents dans la requête SQL.


Par ailleurs, je déconseille (comme JMM?) de stocker en tableau la
totalité des lignes renvoyées par la requête comme R12y le fait dans le
tableau $lignes. En effet:
(1) cela peut représenter des Mo de données si la requête est moins
ciblée que prévu
(2) MySQL gérera toujours mieux que PhP un ensemble de données (lignes x
colonnes) lues dans MySQL.


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/