Lire une ligne du db

Résolu
zelze Messages postés 234 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 30 juillet 2008 - 28 juil. 2005 à 02:48
zelze Messages postés 234 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 30 juillet 2008 - 30 juil. 2005 à 03:22
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

malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
28 juil. 2005 à 06:42
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"];

}
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juil. 2005 à 09:12
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).
0
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
28 juil. 2005 à 09:19
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
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
28 juil. 2005 à 09:54
Hehe, moi je déconseille le site siteduzero... y a trop de fautes! Le meilleur link, c'est php.net, sans discussion!

Enjoy, ++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
GillesWebmaster Messages postés 496 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 29 juillet 2009 1
28 juil. 2005 à 10:09
Bonjour ,
oui mais pour les newb...


<HR SIZE=2>

Si ma réponse te plaît merci de l'accepter
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
28 juil. 2005 à 10:14
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
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
28 juil. 2005 à 11:00
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>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juil. 2005 à 11:09
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).
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juil. 2005 à 11:10
Au passage, pour ta 1ere question et les noms longs : les alias sont la pour ca ;-)
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
28 juil. 2005 à 11:22
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juil. 2005 à 11:22
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juil. 2005 à 11:23
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>
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
28 juil. 2005 à 11:25
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juil. 2005 à 11:31
"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>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juil. 2005 à 11:53
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.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juil. 2005 à 12:00
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>
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
28 juil. 2005 à 12:25
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juil. 2005 à 12:51
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>
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
28 juil. 2005 à 13:10
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juil. 2005 à 13:15
C'est évident ;-)

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




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