Récuppérer une donnée en c de Mysql [c][Mysql] - C - Programmation
Marsh Posté le 17-04-2006 à 22:21:17
> debut = malloc(100);
- je ne vois pas de free() sur cette variable. utilise plutot:
char debut[128];
qui est plus rapide qu'un malloc, et se libère automatiquement à la fin de la fonction.
> res = mysql_store_result(conn)
cette ligne alloue aussi de la mémoire, interne à la librairie mysql client, que tu as oublié de libérer, tu as probablement une fuite mémoire dans ton code
> nb_tour = *ligne[0];
si mes souvenirs sont bons, les type MYSQL_ROW est une liste de chaînes de caratères, aussi avec ton code, tu mets le numéro ASCII du premier caractère du premier champs dans nb_tour (un chiffre, c'est de 64 à 74). Ce qu'il faut faire, c'est transformer cette représentation sous forme de chaîne en un nombre. Pour celà je te conseilles de vérifier quel est le type entier utilisé par ton champs (int,bigint...) et quelle est sa longueur (cette dernière info est dans la doc mysql, chapitre type entiers). Très vraisemblablement, tu devra utiliser l'une des fonctions atoi(), atol(), atoll():
nb_tour = atoll(*ligne[0]);
Une dernière remarque, si tu doit éxécuter plusieurs requêtes, ouvre et ferme la BDD en dehors de ta fonction, au début et à la fin du programme par exemple.
Marsh Posté le 17-04-2006 à 22:56:17
errata: petite erreur de copier/collé: il fallait lire bien sûr:
nb_tour = atoll(ligne[0]);
Marsh Posté le 17-04-2006 à 23:15:30
utilises plutot strtol qui permet de controller la validitée de la conversion, et les fonctions ato* sont dépréciées par les fonctions strto*
Marsh Posté le 20-04-2006 à 23:54:09
Merci de vos reponses, cela m'a fortement aidé et j'ai reussi a réaliser ce que je cherchai a faire
merci
Marsh Posté le 17-04-2006 à 16:32:06
Bonjour
J'essaye de recuppérer une donnée (nb_tour) en c dans une base mysql.
Mon problème c'est que je récupère une valeur différente que celle qui est dans ma base.
Je ne comprend pas pourquoi.
Voici ma fonction :
int get_nb_tour(idcourse)
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW ligne;
char *debut;
int nb_tour;
if (DEBUG==1) printf(" Fonction Get Nb Course\n" );
// initialisation
if((conn = mysql_init(NULL)) == NULL)
{
printf("Erreur d'initialisation\n" );
return -1;
}
// connexion au serveur (ici, en local)
if(mysql_real_connect(conn,"localhost","yoyo","tX56JBHD89","course",0,NULL,0)==NULL)
{
printf("Erreur de connexion\n" );
return -1;
}
debut = malloc(100);
sprintf(debut,"SELECT nb_tour FROM course WHERE idcourse=%d",idcourse);
if (mysql_query(conn,debut))
{
printf(" Erreur dans la requête : %s\n",debut);
return -1;
}
else
{
if (DEBUG==1) printf(" Requete OK\n" );
if ((res = mysql_store_result(conn)) != NULL)
{
if (DEBUG==1) printf(" MySQL Store Result OK\n" );
if ((ligne = mysql_fetch_row(res)) != NULL )
{
if (DEBUG==1) printf(" MySQL Fetch Row OK\n" );
nb_tour = *ligne[0];
}
else
{
if (DEBUG==1) printf(" MySQL Fetch Row KO\n" );
nb_tour = -1;
}
}
else
{
if (DEBUG==1) printf(" MySQL Store Result KO\n" );
nb_tour = -1;
}
}
mysql_close(conn);
return(nb_tour);
}