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

cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011 - 23 mars 2010 à 15:39
cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011 - 30 mars 2010 à 09:06
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

fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
23 mars 2010 à 17:08
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).
0
fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
23 mars 2010 à 17:16
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.
0
cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011
29 mars 2010 à 09:00
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 ...
0
cs_Juju1988 Messages postés 70 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 21 juin 2011
30 mars 2010 à 09:06
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
0
Rejoignez-nous