MYSQL - Récupération données
Voila j'ai crée un programme afin de récupérer des données d'une base de données. Or j'ai un soucis dans mon code baseDeDonnes.c avec la récupération du résultat.
J'ai trouvé des fonctions mais je ne les comprends pas, pourriez-vous me les expliquer ?
ma structure de donnée s_resultat est
Code:
1 2 3 4 5 6 7 8 9
|
typedef struct resultat
{
int insee;
char nom[30];
double latitude;
double longitude;
int cp;
}s_resultat; |
Mon fichier code source
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
// Fonction permettant de récuprer les resultats de la requete et de les stocker dans un tableau
s_resultat* recuperationInformations(s_resultat *tab, MYSQL *mysql){
//Déclaration des pointeurs de structure
MYSQL_RES *result = NULL;
MYSQL_ROW row = NULL;
int i,cpt,nb, num_champs = 0;
//Requête qui sélectionne tout dans ma table scores
mysql_query(mysql, "SELECT * FROM ville");
printf("Requete effectuee ! \n");
result = mysql_store_result(mysql);
nb = mysql_num_rows(result);
// tablo dynamique du resultat
do{
tab=(s_resultat*)malloc(nb * sizeof(s_resultat));
cpt ++;
}while(tab==NULL && cpt==3);
//On récupère le nombre de champs
num_champs = mysql_num_fields(result);
//Structure temporaire
s_resultat temp;
//Tant qu'il y a un résultat
while ((row = mysql_fetch_row(result))) {
// CREATION STRUCTURE TEMPORAIRE
temp.insee = strtoul(row[0]?row[0]:"0", NULL, 10);
//temp.insee = strtoul(row[0], NULL, 10);
strcpy(temp.nom,row[1]?row[1]:"");
//printf("%s",row[1]) ;
temp.latitude = strtod(row[2]?row[2] : "0",NULL );
temp.longitude = atof(row[3]?row[3] : "0" );
temp.cp = strtoul(row[4]?row[4] : "0", NULL, 10 );
// INSERTION DANS UN TABLEAU DYNAMIQUE
*(tab+i) = temp;
i++;
}
//Libération du jeu de résultat
// mysql_free_result(result);
// for(int i=0; i<nb; i++) free(tab+i);
// free(tab);
//Fermeture de MySQL
//mysql_close(&mysql);
//system("pause");
return tab;
} |
Je ne comprends donc pas les fonctions :
temp.insee = strtoul(row[0]?row[0]:"0", NULL, 10);
strcpy(temp.nom,row[1]?row[1]:"");
temp.latitude = strtod(row[2]?row[2] : "0",NULL );
temp.longitude = atof(row[3]?row[3] : "0" );
temp.cp = strtoul(row[4]?row[4] : "0", NULL, 10 );
Est-ce véritablement les fonctions à utiliser ? J'en ai mis d'autre en commentaire quelle est la différence ? Merci de m'éclairer.
J'ai également un autre soucis avec mon insertion dans le tableau dynamique, je ne comprends pas le problème. Mon programme s'execute mais plante à l'execution de cette commande. Quel est le problème selon vous ?
Ensuite ma table mysql a été déclaré avec des doubles(9,9) et dans mon programme C je n'arrive pas à récupérer la totalité de la variable, elle est tronqué comment est ce possible ?
Merci d'avance