Discussion:
traiter un tableau de mysql_fetch_array
(trop ancien pour répondre)
Mihamina (R12y) Rakotomandimby
2007-04-13 06:00:46 UTC
Permalink
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.
P'tit Marcel
2007-04-13 06:57:46 UTC
Permalink
Post by Mihamina (R12y) Rakotomandimby
$lignes[]=mysql_fetch_array($result);
$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/
Pascal PONCET
2007-04-13 06:57:46 UTC
Permalink
Post by Mihamina (R12y) Rakotomandimby
$lignes[]=mysql_fetch_array($result);
- Est-ce un comportement inévitable?
Salut,
Utilise plutôt "mysql_fetch_assoc()" et tu n'auras que la partie
associative du tableau.
Pascal
thierry
2007-04-13 09:41:16 UTC
Permalink
Post by Mihamina (R12y) Rakotomandimby
Bonjour,
bonjour
Post by Mihamina (R12y) Rakotomandimby
Soit un truc ressemblant à ceci,
idem
Post by Mihamina (R12y) Rakotomandimby
/////////////////////////////////////
$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
Mihamina Rakotomandimby (R12y)
2007-04-13 12:15:37 UTC
Permalink
Post by thierry
Post by Mihamina (R12y) Rakotomandimby
/////////////////////////////////////
$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.
Jean-Marc Molina
2007-04-26 22:37:04 UTC
Permalink
Post by Mihamina (R12y) Rakotomandimby
$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
Didier
2007-04-27 22:05:39 UTC
Permalink
Post by Jean-Marc Molina
Post by Mihamina (R12y) Rakotomandimby
$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.
P'tit Marcel
2007-04-29 21:36:06 UTC
Permalink
Post by Didier
Post by Jean-Marc Molina
Post by Mihamina (R12y) Rakotomandimby
$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/
Continuer la lecture sur narkive:
Loading...