Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2621 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c][Mysql]Récuppérer une donnée en c de Mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c][Mysql]Récuppérer une donnée en c de Mysql

n°1348185
coolben
http://www.starbusiness.fr
Posté le 17-04-2006 à 16:32:06  profilanswer
 

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 :
 
 

Citation :

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);
}

mood
Publicité
Posté le 17-04-2006 à 16:32:06  profilanswer
 

n°1348381
nargy
Posté le 17-04-2006 à 22:21:17  profilanswer
 

> 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.

n°1348401
nargy
Posté le 17-04-2006 à 22:56:17  profilanswer
 

errata: petite erreur de copier/collé: il fallait lire bien sûr:
nb_tour = atoll(ligne[0]);

n°1348418
skelter
Posté le 17-04-2006 à 23:15:30  profilanswer
 

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*

n°1350890
coolben
http://www.starbusiness.fr
Posté le 20-04-2006 à 23:54:09  profilanswer
 

Merci de vos reponses, cela m'a fortement aidé et j'ai reussi a réaliser ce que je cherchai a faire
merci
 :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c][Mysql]Récuppérer une donnée en c de Mysql

 

Sujets relatifs
probleme de connexion a une base de donnée sur no-sec..Warning: mysql_fetch_row(): supplied argument is not a valid MySQL
Mysql -> Dom Xml -> Dom Xst -> problème avec les accentsarchivache d'un texte word dans une bd mysql
gestion de donnée récupérer sur d'autre classeurLire une base de donnée sur PC
[PHP]Utiliser le resultat d'un DATE_FORMAT de requete mysql sous dream[SQL] comment specifier la longueur d'une donnée ?
[C++/résolu] donnée static const Pi=3.14Vbs et connexion a une base de données mysql
Plus de sujets relatifs à : [c][Mysql]Récuppérer une donnée en c de Mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR