C récupérer requête dans un tableau

Fermé
juju1988 - Modifié par juju1988 le 23/03/2010 à 16:15
 juju1988 - 30 mars 2010 à 09:04
Bonjour,

Je débute en C et je cherche à récupérer le résultat d'une requête dans un tableau ... ou autre.
J'aimerai récupérer le contenu de ma requête afin de comparer chaque ligne avec un numéro que je récupère en paramètre.
Je crois qu'il faut que j'utilise mysql_fetch_row mais je n'en suis pas sûre et je ne sais pas trop comment l'utiliser.

Voici le code que j'ai tenté de faire, la partie concernée est celle du else:

    /* On lance la requête... */ 
  query = malloc(256+user->lg); 
  sprintf(query,"SELECT bug_id FROM bugs b, users u WHERE b.affecte_a = u.user_id AND b.status = 2 AND u.login = '%s';",user->buf);                       
  TRACE1("TestFTwithUsername, REQ MySQL : %s\n",query); 
   
  /* mysql_query() Exécute une requête SQL spécifiée en tant que chaîne terminée par un caractère nul.*/ 
  if (mysql_query(sock,query)) 
  { 
   char *tmp; 
    
   TRACE2("TestFTwithUsername : Couldn't select to mysql (%s)\n  %s\n",mysql_error(mysql),query); 
   tmp = "E fwcvs: Couldn't find FT in the database.\n"; 
   envoiebuf(CLNTOUTPUT,tmp,strlen(tmp)); 
   free(query); 
   mysql_close(mysql); 
   return 0; 
  } 
  else 
  { 
   res = mysql_store_result(sock); 
   row = mysql_fetch_row(res); 
   str = strdup(*row);     
   int nblignes = mysql_num_rows(res); 
   TRACE1("NB Lignes : %d\n", nblignes);   
    
   for(j = 0; j < nblignes; j++)  
   { 
      sprintf(str,"%s", row[j]); 
      TRACE1("STR : %s\n",str); 
   }                         
  }


Merci d'avance pour votre aide, à force d'essayer diverses solutions je me perds
A voir également:

2 réponses

Bonjour,
Il faut que tu fasses autant de mysql_fetch_row qu'il y a d'enregistrement résultat à ta requête ...

En gros, ta boucle doit faire ça :

mysql_fetch_row --> recherche le premier enreg
---> traitement du premier enreg
mysql_fetch_row --> recherche le 2ème enreg
---> traitement du deuxième enreg
mysql_fetch_row --> recherche le 3ème enreg
...etc... jusqu'a être arrivé à ton nombre d'enregs

Cordialement,
M.
1
C'est pas ce que je fais dans mon else ?

else 
  { 
   res = mysql_store_result(sock); 
   row = mysql_fetch_row(res); 
   str = strdup(*row);     
   int nblignes = mysql_num_rows(res); 
   TRACE1("NB Lignes : %d\n", nblignes);   
    
   for(j = 0; j < nblignes; j++)  
   { 
      sprintf(str,"%s", row[j]); 
      TRACE1("STR : %s\n",str); 
   }                       


Dans nblignes j'ai le nombre d'enregistrement ... donc je vois pas trop ce que vous voulez dire ... désolée je débute ... Comment dois je construire en gros ma boucle avec mysql_fetch_row pour récupérer tous les enregistrements et les mettre dans un tableau (est ce que c'est possible déjà?).
Une fois ce tableau complet je le parcourerai pour tester chaque valeur avec celle que j'ai en paramètre.
0
Bonjour,
- Oui ton problème est bien dans le traitement du else
- Oui ce que tu souhaites faire est possible

C'est tout simple :
Comme je te l'ai dit plus haut, il faut faire un fetch pour chaque enregistrement résultat de ta requête.

Dans ton code, tu fais le fetch du premier résultat, mais c'est tout.
Il suffit de suivre l'algorithme que je t'ai indiqué ci-dessus.

A première vue, tu as juste à déplacer deux lignes de ton code pour qu'il fonctionne... (je te laisse chercher, comprendre, puis corriger)

Cordialement,
M.
1
Je suis désolée mais je bloque, je ne vois pas comment faire, j'ai essayé de nombreuses fois mais je n'arrive pas à comprendre la logique ...
Et surtout comment tout récupérer dans mon tableau ... en attendant une réponse je vais essayerde trouver ces deux lignes à déplacer :)

merci de votre aide en tout cas
0
J'ai essayé quelque chose dans le genre en comprenant que mysql_fetch_row récupère la ligne suivante :

else
{
res = mysql_store_result(sock);
int nblignes = mysql_num_rows(res);

for(j = 0; j < nblignes; j++)
{
row = mysql_fetch_row(res);
TRACE1("NB Lignes : %d\n", nblignes);
sprintf(str,"%s", row[j]);
TRACE1("STR : %s\n",str);
}
}
Mais cela ne fonctionne pas. Je ne comprend pas. Désolée de ma lenteur d'esprit je suis malade et j'ai un peu de mal je dois bien l'avouer ... :-/
0
Voilà ce que j'ai fait, est ce correct ? :

int comparaisonFTs(numFT, res)
int numFT;
{
MYSQL *mysql,*sock;
MYSQL_RES *res;
MYSQL_ROW row;

int str[100];
int j,i;
int nblignes = mysql_num_rows(res);

for (j = 0; j < nblignes; j++)
{
row = mysql_fetch_row(res);
sprintf(str,"%s", row[j]);
}

for (i = 0; j < nblignes; i++)
{
if (numFT = str[i])
{
return(1);
}
else
{
return(0);
}
}
}

Cependant cela me dit re redeclared as different kind of symbol, comment faire? Puis previous definition of res was here et ausis passing argument 1 of sprintf from incompatible pointer type ... Sachant que dans ma fonction précédente j'ai récupérer res de cette manière :

res = mysql_store_result(sock);

Puis je le passe en paramètre dans l'appel de ma fonction ici présente.

Quelle est mon erreur? Ma boucle for est-elle correcte?

Merci d'avance
0