Pb avec mysql_fetch_row [PHP/Mysql] - PHP - Programmation
Marsh Posté le 22-09-2006 à 00:32:12
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é
Marsh Posté le 22-09-2006 à 10:20:10
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...
Marsh Posté le 22-09-2006 à 10:35:02
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 :
|
En termes de propreté du code, y'a sans doute mieux, mais dans l'idée c'est ça.
Marsh Posté le 22-09-2006 à 10:58:02
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).
|
mmh oki, merci bcp pour ton aide
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
Effectivement j'avais mal compris le fonctionnement de la fonction, merci beaucoup, ca me debloque bien .
Marsh Posté le 22-09-2006 à 11:03:25
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
Marsh Posté le 22-09-2006 à 11:12:54
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 ?
Bon bah si quelqu'un voit pourquoi... j'ai pas php sous la main, donc je peux pas trop faire un test rapide.
Marsh Posté le 22-09-2006 à 11:13:13
KrisCool a écrit : Ah ? |
il remplit tout mon tableau avec array
edit : enfin je parle litteralement, si je fais echo $tmp[0] ca renvoit array
Marsh Posté le 22-09-2006 à 11:25:33
korxx a écrit : il remplit tout mon tableau avec 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.
Marsh Posté le 22-09-2006 à 11:32:33
KrisCool a écrit : Oui ça c'est parfaitement normal. mysql_fetch_row() renvoie un tableau (c'est écrit dans la doc). |
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
Marsh Posté le 22-09-2006 à 11:44:58
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 |
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 :
|
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
Marsh Posté le 22-09-2006 à 11:50:34
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.
|
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
Marsh Posté le 22-09-2006 à 00:22:27
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.
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
Message édité par korxx le 22-09-2006 à 08:36:58