Lire une ligne du db

Résolu
Signaler
Messages postés
234
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
-
Messages postés
234
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
-
Bonjour.
Je débute a l'instant en php et en sql, et j'ai deja un probleme de taille:
J'ai me requéte SELECT * FROM table. Le probleme c'est que quand je récupère les données par la fonction mysql_fetch_assoc, je n'arrive a lire que la premiere ligne.
Quelqu'un peut il m'aider?
Merci d'avance pour vos réponses...

45 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Hello,



-> http://php.benscom.com/manual/fr/function.mysql-fetch-assoc.php:


$sql = "SELECT id as userid, fullname, userstatus 

        FROM   sometable

        WHERE  userstatus = 1";



$result = mysql_query($sql);



// Tant qu'une ligne existe, place cette ligne dans la variable $row


// sous la forme d'un tableau associatif.


// Note : Si vous n'attendez qu'une seule ligne, oubliez la boucle


// Note : Si vous utilisez extract($row); dans la boucle suivante


//       vous créerez $userid, $fullname et $userstatus

while ($row = mysql_fetch_assoc($result)) {

    echo $row["userid"];

    echo $row["fullname"];

    echo $row["userstatus"];

}
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,



a mon avis, ce qui manquait, c'etait le while.

J'en profite pour preciser a zelze que l'exemple de Malik a 2 avantages :

- il montre bien le while pour aller chercher les resultats renvoyes par une requete sql (qui les renvoie ligne a ligne)

- il ne fait pas de SELECT * ! Le SELECT * est fortement deconseille.
Il vaut mieux, comme dans cet exemple, nommer chaque champ desire
(question d'alleger la charge serveur).
Messages postés
496
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
29 juillet 2009
1
Bonjour ,
allez voir http://www.siteduzero.com/php/liredonnees.php
c'est bien expliqué


<HR SIZE=2>

Si ma réponse te plaît merci de l'accepter
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Hehe, moi je déconseille le site siteduzero... y a trop de fautes! Le meilleur link, c'est php.net, sans discussion!

Enjoy, ++
Messages postés
496
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
29 juillet 2009
1
Bonjour ,
oui mais pour les newb...


<HR SIZE=2>

Si ma réponse te plaît merci de l'accepter
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Ben justement pour les newbies, c'est dommage d'apprendre faux! Car
c'est franchement difficile de corriger des mauvaises
habitudes... mais je crois que le webmaster du zero s'en fout,
car si je me souviens bien, je lui avais déjà signalé pas mal de fautes
mais il n'avait rien changé.



En d'autres termes, éviter du zero si vous êtes newbies ! C'est mon avis
Messages postés
461
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
16 février 2012

Salut ptit question a malalam et aux autres tu dis tres souvent cette phrase "il ne fait pas de SELECT * ! Le SELECT * est fortement deconseille. Il vaut mieux, comme dans cet exemple, nommer chaque champ desire (question d'alleger la charge serveur)." et je suis plutot d accord avec ca (mais pour des questions de fleme ou de test ou autres j utlise trop souvent des select * honte a moi lol), mais voila j ai developper un site pour une amie (www.pacanetimmo.com si vous voulez critiquer allez y si c contructif suis pas contre) et donc j abuse helas du select * donc je vais corriger cela, mais lors d'affichage par exemple j'affiche la totalité de mes champs de ma table (parfois pres de 20) et donc ecrit chaque nom est assez long (mais c pas le pire), dans ce cas puis je utiliser un select * (car la mettre * qui va selectionner 22 champs ou mettre les 20 champs a afficher (moins les deux d id en faite), ou vais je alleger la charge serveur ?? ) enfin voila petit question d optimisation en gros j ecoute et lis vos conseils.

Euh deuxieme petit detail, j ai lu sur des post qu il fallait eviter le mysql_fetch_array, alors la pareil j utlise que ca, pourquoi eviter en quoi c mal et remplacer par quoi de mieux ??

Merci.


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
En fait, la difference, je pense, est que avec *, qui est un joker, il
va chercher deja le nom des champs. Parce que tu ne les nomme pas. Donc
il faut qu'il les recupere d'abord.

Si tu les nommes, tu l'adresses directement aux champs voulus. Donc
meme si tu prends tous les champs de ta table...il vaut mieux nommer
les champs.



mysql_fetch_array () est une fonction stupide.

Pourquoi ? parce qu'elle te permet de recuperer tes champs soit avec
leur index "integer", soit avec leur clef associative (nom du champ).
Or, tu ne vas utiliser qu'un e des deux manieres, a priori...

donc, soit tu utilises mysql_fetch_assoc (clef associative) (qui a ma
preference pour des questions de lisibilite du code) (ouis ont sait
jamais, tu refais ta table, tu changes l'ordre des champs...t#es dans
la merde si dans ton script tu n#as pas utiliser assoc, mais row.).

soit tu utilises mysql_fetch_row (clef numerique), qui est un peu plus rapide (mais moins lisible, donc, a mon sens).
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Au passage, pour ta 1ere question et les noms longs : les alias sont la pour ca ;-)
Messages postés
461
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
16 février 2012

OKi merci pour ce point de detail donc je vais nommer mes champs, les noms long c pas forcement genant mais euh c quoi un alias ??? c'est quand on ecrit select machin as truc_bidule_machin le nom du champ devien machin c bien ca ? et apres j utilise celui la dans le mysql_fetch_assco donc, de totue facon comme je fait deja un mysql_fetch_array et que j utilise le nom des champs v(suis d accord avec ta remarque plus clair et evite tout souci si on modifie l ordre ou autre) vais pas utiliser d alias

Merci


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



tu peux aussi toujours dans un but de lisibilité utiliser mysql_fetch_array($requete,MYSQL_ASSOC)



ça évite de générer un tableau aux indices numériques et donc ça te
permet de rendre la fonction un peu plus rapide, enfin bon
mysql_fetch_row() reste la référence pour un site visité régulièrement
;-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Heu pour le site du zero je ferai pas de commentaires (lol)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
461
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
16 février 2012

Salut antho,

mysql_fetch_array($requete,MYSQL_ASSOC) est donc egal a mysql_fetch_assoc que me propose malalam ?? ou est donc l interet ? lequel te semble meilleur ?

enfin bon mysql_fetch_row() reste la référence pour un site visité régulièrement ;-)
pourquoi malalm me la deconseillé alors ?? passé par le nom du champs ralenti le code ?


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
"mysql_fetch_array($requete,MYSQL_ASSOC) est donc egal a
mysql_fetch_assoc que me propose malalam ?? ou est donc l interet ?
lequel te semble meilleur ?"



Normalement oui :-)



Bah le meilleur parmis ces deux fonctions je n'en ai pas idée, il
faudrait faire un benchmark :-) mais je pense que mysql_assoc s'en
sortirait peut-être mieux



"pourquoi malalm me la deconseillé alors ??"



Pour une question de lisibilité mais bon quand t'as une requête écrite
proprement au dessus, c'est pas compliqué le fetch_row, au pire tu mets
des commentaires à côté pour écrire le nom du champ associé



"passé par le nom du champs ralenti le code ?"



Tout à fait :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
je suis d'accord avec Antho.



je ne deconseille pas le fetch_row, c'est juste que j'aime voir le nom
de mes champs (j'ai une mauvaise memoire lol). Ensuite, il peut arriver
que l'on modifie une table et insere un champ entre deux autres champs,
ou que l'on refasse une table, et que les champs ne soient plus dans le
meme ordre.

dans ce cas, avec un fetch_row, tu es dans le caca ;-) Tu dois modifier
aussi ton script, ce qui n'est pas le cas du fetch_assoc.



Et oui, num_rows est un peu plus rapide que fetch_assoc. Donc plus tu
as de requetes, plus la difference se fera sentir. C'est pourquoi Antho
parle de site beaucoup visite.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Enfin c'est peut-être parce que j'ai l'habitude d'avoir des pages avec
des milliers de lignes de code, mais le fetch_row() ne m'a jamais posé
le moindre problème. Le seul cas ou je suis obligé d'utiliser
fetch_array() (pour une question de simplification) c'est dans mon
moteur de recherche :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
461
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
16 février 2012

ok ben merci a tous pour vos reponse je vais voir a tout ca, mais vais surement m orienter vers le assoc car avoir le nom est mieux, et puis si vraiment ca fais ramer en cas de nombreuse visite on avisera.
merci


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
C'est mieux pour la lisibilité oui, pour les perfs si t'as pas un site
nécessitant un serveur dédié ça ira de toutes façons, mais bon si c'est
pour une optimisation au max, privilégie le fetch_row ;-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
461
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
16 février 2012

Ok ok pour le serveur dedié en cas de succés oui lol, mais je viendrai vous reconsulter car a mon avis faudra surement plus que mettre fetch_rows pour optimiser le tout lol.
Merci

<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
C'est évident ;-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>