Récupérer résultat d'une requête SQL dans un tableau?

Signaler
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
21 juin 2011
-
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
21 juin 2011
-
Bonjour

Je débute en C et je cherche à récupérer le résultat de ma requête SQL dans un tableau en C. Je crois qu'il faut utiliser mysql_fetch_row ... mais je ne sais pas trop comment faire ...

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 <= mysql_num_rows(res); j++)
{
sprintf(str,"%s", row[j]);
TRACE1("STR : %s\n",str);
}
}

Ma partie concerne le else ... si mysql_query OK alors je veux récupérer dans un tableau mes résultats de ma requête ... J'ai besoin que d'une seule colonne mais je peux avoir plusieurs lignes.

Puis je veux parcourir mon tableau et le comparer à un numFT ...

A force de tester différentes manières je ne sais plus où j'en suis ...

Merci d'avance pour votre lanterne

4 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
salut,

Pour faire du mysql en C de temps en temps j'allais voir l'aide php (c'est quasi pareil).
Là tu dois utiliser mysql-fetch-array (j'ai cherché tres vite, donc je n'ai pas vu l'aide de l'api c).
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
oups j'ai répondu un peu vite.

si j'ai bien compris :
row[0] est le 1er élément de la ligne
row[1] est le 2e élément de la ligne

dans ton code j''ai l'impression que pour toi (dans ta boucle for) row[1] est la 2e ligne.

donc fait un while avec mysql_fetch_array pour avoir toutes les lignes, au lieu de faire ta boucle for.

Il y a peut-etre mieux, je connais mal mysql.
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
21 juin 2011

Oui pour moi row[1] était ma deuxième ligne c'est faux?

J'ai testé avec mysql_fetch_array mais j'ai pas l'impression que ce soit utilisable en C. J'avais fait ainsi :

else
{
res = mysql_store_result(sock);
row = mysql_fetch_row(res);
int nblignes = mysql_num_rows(res);
TRACE1("NB Lignes : %d\n", nblignes);
montableau = mysql_fetch_array(res);

while (row = mysql_fetch_array(res))
{
printf("ID : %s Nom : %s", row[0], row[1]);
}

Et j'ai une erreur au moment de l'assignement dans mon tableau et dans ma boucle while ...

Je suis perdue là ...

Je vais repartir sur mon ancien else et essayer de le modifier, si quelqu'un à une idée je suis preneuse ...
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Statut
Membre
Dernière intervention
21 juin 2011

Voilà ce que j'ai fait, après reflexion, 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