Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1104 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/Mysql] Pb avec mysql_fetch_row

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/Mysql] Pb avec mysql_fetch_row

n°1446042
korxx
Posté le 22-09-2006 à 00:22:27  profilanswer
 

Je pense que le probleme doit etre très simple mais bon... J'ai beau chercher ci et la des infos je comprends pas d'ou vient le probleme.
Si une bonne ame pouvait me depanner.  :jap:  
 
 
en gros je fais une requete (simplifiée, j'enleve ce qui sert a rien vis a vis du probleme) :
 
$result=@mysql_query('SELECT id FROM Galerie ORDER BY id ASC LIMIT 0,9 ;');    
 
//   je lui demande donc les 9 premieres id classé par ordre et en commencant par la premiere.
   
$tmp=@mysql_fetch_row($result);  
 
// c'est la ou ca doit clocher, je veut juste mettre les 9 resultats dans un tableau tmp, seulement quand j'y accede j'ai bien ma premiere valeur en $tmp[0] mais je n'ai pas les 8 autres...
Si quelqu'un voit ou je me plante...
 
Merci d'avance  :jap:


Message édité par korxx le 22-09-2006 à 08:36:58
mood
Publicité
Posté le 22-09-2006 à 00:22:27  profilanswer
 

n°1446054
korxx
Posté le 22-09-2006 à 00:32:12  profilanswer
 

Bon j'suis en train de faire ca d'une autre facon, mais par curiosité j'aimerais bien savoir quelle erreur j'ai fait :)
 
edit :
 
En fin de compte pour l'integration d'une option plus tard il faudra que je sache le faire, donc la question reste toujours d'actualité :jap:


Message édité par korxx le 22-09-2006 à 00:46:38
n°1446111
korxx
Posté le 22-09-2006 à 10:20:10  profilanswer
 

J'ai essayé de voir si j'avais bien désalloué $tmp et $result avant mais c'est ok... Je comprends pas :/
 
Je pourrais faire une boucle et remplir $tmp[i] au fur et a mesure mais ca va me faire 9 requetes au lieu d'une seule ca me semble pas terrible...

n°1446121
KrisCool
“Verbeux„
Posté le 22-09-2006 à 10:35:02  profilanswer
 

Relis bien le manuel de tes fonctions php, je pense que tu n'as pas bien compris comme ça fonctionnait (le prends pas mal, ça arrive).
 
mysql_fetch_row() retourne 1 ligne du résultat d'une requête. Si ta requête retourne 9 lignes, tu dois appeler 9 fois mysql_fetch_row().
 
En aucun cas ça ne veut dire que ta requête SQL sera exécutée 9 fois. La requête est seulement exécutée une fois lors de l'appel à mysql_query().
 
Faire une boucle pour traiter le résultat d'une requête ligne par ligne est la façon la plus courante de faire quand on travaille avec une base de données en php (et pas seulement en php d'ailleurs).
 

Code :
  1. $tmp = array();
  2. $result = @mysql_query('SELECT id FROM Galerie ORDER BY id ASC LIMIT 0,9 ;');
  3. if ($result !== FALSE) {
  4.   while ($row = mysql_fetch_row($result)) {
  5.     array_push($tmp, $row);
  6.   }
  7. }


 
En termes de propreté du code, y'a sans doute mieux, mais dans l'idée c'est ça.

Message cité 1 fois
Message édité par KrisCool le 22-09-2006 à 10:38:10

---------------
Loose Change Lies | Bars | Last.fm
n°1446148
korxx
Posté le 22-09-2006 à 10:58:02  profilanswer
 

KrisCool a écrit :

Relis bien le manuel de tes fonctions php, je pense que tu n'as pas bien compris comme ça fonctionnait (le prends pas mal, ça arrive).
 
mysql_fetch_row() retourne 1 ligne du résultat d'une requête. Si ta requête retourne 9 lignes, tu dois appeler 9 fois mysql_fetch_row().
 
En aucun cas ça ne veut dire que ta requête SQL sera exécutée 9 fois. La requête est seulement exécutée une fois lors de l'appel à mysql_query().
 
Faire une boucle pour traiter le résultat d'une requête ligne par ligne est la façon la plus courante de faire quand on travaille avec une base de données en php (et pas seulement en php d'ailleurs).
 

Code :
  1. $tmp = array();
  2. $result = @mysql_query('SELECT id FROM Galerie ORDER BY id ASC LIMIT 0,9 ;');
  3. if ($result !== FALSE) {
  4.   while ($row = mysql_fetch_row($result)) {
  5.     array_push($tmp, $row);
  6.   }
  7. }


 
En termes de propreté du code, y'a sans doute mieux, mais dans l'idée c'est ça.


 
 
 
mmh oki, merci bcp pour ton aide  :jap:  
 
En fait quand je parlais de faire neuf requetes c'est parce que je pensais faire une boucle avec la requete mysql 9 fois mais avec la limite décallé d'un coup a chaque fois :D
 
Effectivement j'avais mal compris le fonctionnement de la fonction, merci beaucoup, ca me debloque bien  :love: .
 
 


Message édité par korxx le 22-09-2006 à 11:03:33
n°1446152
korxx
Posté le 22-09-2006 à 11:03:25  profilanswer
 

par contre ton code n'a pas l'air de marcher, mais au moins je sais d'ou vient mon erreur je devrais pouvoir m'en sortir maintenant  :)
 

Message cité 1 fois
Message édité par korxx le 22-09-2006 à 11:13:20
n°1446162
KrisCool
“Verbeux„
Posté le 22-09-2006 à 11:12:54  profilanswer
 

korxx a écrit :

par contre ton code n'a pas l'air de marcher, mais au moins je sais d'ou vient mon erreur je devrais pouvoir m'en sortir maintenant  :)


 
Ah ?  [:guts]  
Bon bah si quelqu'un voit pourquoi... j'ai pas php sous la main, donc je peux pas trop faire un test rapide.


---------------
Loose Change Lies | Bars | Last.fm
n°1446163
korxx
Posté le 22-09-2006 à 11:13:13  profilanswer
 

KrisCool a écrit :

Ah ?  [:guts]  
Bon bah si quelqu'un voit pourquoi... j'ai pas php sous la main, donc je peux pas trop faire un test rapide.


 
 
il remplit tout mon tableau avec array  :pt1cable:
 
edit : enfin je parle litteralement, si je fais echo $tmp[0] ca renvoit array
 
 

Message cité 1 fois
Message édité par korxx le 22-09-2006 à 11:14:01
n°1446165
KrisCool
“Verbeux„
Posté le 22-09-2006 à 11:25:33  profilanswer
 

korxx a écrit :

il remplit tout mon tableau avec array  :pt1cable:
 
edit : enfin je parle litteralement, si je fais echo $tmp[0] ca renvoit array


 
Oui ça c'est parfaitement normal. mysql_fetch_row() renvoie un tableau (c'est écrit dans la doc).
Chaque élément du tableau $tmp est donc lui aussi un tableau.


---------------
Loose Change Lies | Bars | Last.fm
n°1446176
korxx
Posté le 22-09-2006 à 11:32:33  profilanswer
 

KrisCool a écrit :

Oui ça c'est parfaitement normal. mysql_fetch_row() renvoie un tableau (c'est écrit dans la doc).
Chaque élément du tableau $tmp est donc lui aussi un tableau.


 
 
si j'ai bien compris, mysql_fetch_raw me renvoit un tableau d'une seule colonne, une seule ligne (dans mon cas) avec un ID
il ne peut pas me renvoyer un tableau avec toutes mes ids alors je le boucle pour remplir un tableau d'adresse de tableau a 1 element.
 
Ca me semble un peu tordu :( (mais j'ai compris)
 
ca fait un double adressage a chaque acces, c'est pas super optimisé :/
 
 
ou alors je suis encore en train de raconter des conneries  [:ddr555]

Message cité 1 fois
Message édité par korxx le 22-09-2006 à 11:33:53
mood
Publicité
Posté le 22-09-2006 à 11:32:33  profilanswer
 

n°1446186
KrisCool
“Verbeux„
Posté le 22-09-2006 à 11:44:58  profilanswer
 

korxx a écrit :

si j'ai bien compris, mysql_fetch_raw me renvoit un tableau d'une seule colonne, une seule ligne (dans mon cas) avec un ID
il ne peut pas me renvoyer un tableau avec toutes mes ids alors je le boucle pour remplir un tableau d'adresse de tableau a 1 element.
 
Ca me semble un peu tordu :( (mais j'ai compris)


 
Tordu... c'est ton point de vue, après faut voir que tu es dans un cas particulier avec une requête qui renvoie des lignes à 1 colonne. mysql_fetch_row() est fait pour fonctionner dans tous les cas et avoir un comportement cohérent, donc qu'il y ait une ou plusieurs colonnes dans les lignes du résultat, il renvoie un tableau.
 

Citation :

ca fait un double adressage a chaque acces, c'est pas super optimisé :/


Très honnêtement, l'optimisation elle se joue pas là. Quand tu bosses avec des bases de données, l'optimisation c'est généralement d'abord faire des requêtes bien faites. La récupération du résultat par php, à côté du temps d'exécution de la requête, généralement c'est peanuts.
 
Priorité numéro 1 : faire du code clair qui fonctionne.
 
Pour ton cas, vu qu'on n'utilise que l'unique colonne du résultat de la requête, mon code de tout à l'heure devient le suivant:
 

Code :
  1. $tmp = array();
  2. $result = @mysql_query('SELECT id FROM Galerie ORDER BY id ASC LIMIT 0,9 ;');
  3. if ($result !== FALSE) {
  4.     while ($row = mysql_fetch_row($result)) {
  5.         array_push($tmp, $row[0]);
  6.     }
  7. }


 
Au lieu de mettre $row dans le tableau $tmp, on met juste $row[0] qui correspond à la première colonne, c'est à dire ton index. J'avais zappé ce détail à l'origine ;)


---------------
Loose Change Lies | Bars | Last.fm
n°1446191
korxx
Posté le 22-09-2006 à 11:50:34  profilanswer
 

KrisCool a écrit :

Tordu... c'est ton point de vue, après faut voir que tu es dans un cas particulier avec une requête qui renvoie des lignes à 1 colonne. mysql_fetch_row() est fait pour fonctionner dans tous les cas et avoir un comportement cohérent, donc qu'il y ait une ou plusieurs colonnes dans les lignes du résultat, il renvoie un tableau.
 

Citation :

ca fait un double adressage a chaque acces, c'est pas super optimisé :/


Très honnêtement, l'optimisation elle se joue pas là. Quand tu bosses avec des bases de données, l'optimisation c'est généralement d'abord faire des requêtes bien faites. La récupération du résultat par php, à côté du temps d'exécution de la requête, généralement c'est peanuts.
 
Priorité numéro 1 : faire du code clair qui fonctionne.
 
Pour ton cas, vu qu'on n'utilise que l'unique colonne du résultat de la requête, mon code de tout à l'heure devient le suivant:
 

Code :
  1. $tmp = array();
  2. $result = @mysql_query('SELECT id FROM Galerie ORDER BY id ASC LIMIT 0,9 ;');
  3. if ($result !== FALSE) {
  4.     while ($row = mysql_fetch_row($result)) {
  5.         array_push($tmp, $row[0]);
  6.     }
  7. }


 
Au lieu de mettre $row dans le tableau $tmp, on met juste $row[0] qui correspond à la première colonne, c'est à dire ton index. J'avais zappé ce détail à l'origine ;)


 
 
quand je disais tordu je voulais dire que c'etait dommage de passer par un double adressage pour rien, par contre avec ton nouveau code c'est parfait, j'ai relu le fonctionnement des diverses fonctions dans le manuel php (array et mysql_fetch_row) et effectivement c'est pas si tordu, ca marche dans tous les cas, c'est juste la facon dont on l'utilisait qui convenait pas.
 
En tout cas merci bcp pour ta patience  :jap:  

n°1446467
Aesthetics
Posté le 22-09-2006 à 20:20:31  profilanswer
 

coucou korxx !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/Mysql] Pb avec mysql_fetch_row

 

Sujets relatifs
panier virtuel PHP[MySQL] UNION spéciale :)
Classe simple pour mysql : questions ![MySQL] Taille de Blob
[PHP /Mysql] Internal Server Error dans les parties administrationTable mysql pour un album photo
J'aimerais modifier légérement cette fonction PHP, un peu d'aide svp[PHP] récupérer le code source
Question sur les types de données de MySQL 
Plus de sujets relatifs à : [PHP/Mysql] Pb avec mysql_fetch_row


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR