[C]mysql

mysql [C] - C - Programmation

Marsh Posté le 02-01-2005 à 15:28:11    

Me revoila :D
 
J'ai besoin de faire une requete en C dans une BdD mysql.
 
J'ai trouve quelques tuto qui explique plutot bien (ma requete est simple)
 
Le probleme se situe au niveau du devel de mysql,
Je suis sous fedora core 2 updater a fedora core 3.
J'ai installe mysql ainsi que mysql-devel avec apt.
 
J'ai bien les sources de develloppmeent mysql dans include mais j'ai un probleme avec l'une de ces sources lors de la compilation:
 

Code :
  1. /usr/include/mysql/mysql.h:127: erreur: « MEM_ROOT » ne nomme pas un type
  2. /usr/include/mysql/mysql.h:168: erreur: « MEM_ROOT » ne nomme pas un type
  3. /usr/include/mysql/mysql.h:184: erreur: « MEM_ROOT » ne nomme pas un type


 
S'pa cool comme probleme
Voici ce que ces lignes contiennent:
 

Code :
  1. l. 127: MEM_ROOT alloc;
  2. l. 168: MEM_ROOT field_alloc;
  3. l. 184: MEM_ROOT field_alloc;


 
Apparemment le type MEM_ROOT n'est pas connu ...
 
J'ai cherche sur google et quelques autre personnes ont eu ce probleme mais aucune reponse excepte un gars qui disait de reinstaller les devel, ce que j'ai fait ...
 
Comment resoudre ce pb ? des idees ?

Reply

Marsh Posté le 02-01-2005 à 15:28:11   

Reply

Marsh Posté le 02-01-2005 à 15:41:54    

Salut,
 

Citation :

Comment resoudre ce pb ? des idees ?


 
Certainement.
 
 
 
C'est quelle version ?!
 
(tu as essayé avec une autre version ?)
 
et il y a un truc que je n'ai pas saisie, tu dis avoir installé mysql via APT (donc je pense que tu n'as pas compilé les src toi meme (ou si?)), c'est de quelle compilation que tu fais allusion, compile de mysql ou de ton programme en C ?


Message édité par ouned-coding le 02-01-2005 à 16:02:55
Reply

Marsh Posté le 02-01-2005 à 16:03:04    

3.23.58-13 pour mysql mysql-devel mysql-server
 
je vais voir pour les autres version, deja voir quelle est la derniere

Reply

Marsh Posté le 02-01-2005 à 16:05:28    

mysql-4.1 apparement.

Reply

Marsh Posté le 02-01-2005 à 16:07:02    

oui effectivement il semblerait que ce soit la 4.1
Je vais installer les rpm et voir ce qu'il se passe

Reply

Marsh Posté le 02-01-2005 à 16:07:48    

ok tiens nous au courrant

Reply

Marsh Posté le 02-01-2005 à 21:44:03    

j'ai essaye de mettre la version 4 ou 4.1 de mysql mais je n'ai pas reussi car il y a des pb de dependance entre les paquetages en raison d'un pb de licence (qui pose egalement pb avec debian apparemment).
 
:/
 
Je regarderais encore demain je pense


Message édité par ffomnislash le 02-01-2005 à 21:48:53
Reply

Marsh Posté le 02-01-2005 à 23:22:07    

ok ben si tu veux on essaye sur la version que tu as sous la main.
 
Et il y a un truc que je n'ai pas saisie, tu dis avoir installé mysql via APT (donc je pense que tu n'as pas compilé les src toi meme (ou si?)), c'est de quelle compilation que tu fais allusion, compile de mysql ou de ton programme en C ?


Message édité par ouned-coding le 02-01-2005 à 23:22:17
Reply

Marsh Posté le 03-01-2005 à 00:14:26    

de mon programma en C bien sur (sinon je serais sur OS alternatif :D)
 
edit ---
C'est un programme en C++ et pas en C donc compiler avec g++ ...
Je vais tenter une compilation des lignes mysql en C pour voir
 
verditc compilation avec gcc
J'ai toujours les erreurs de MEM_ROOT + d'autres qui semblent en decouler (erreur de syntaxe apres ...)
-----
 
mysql est installe, je peut le lancer (pas teste de requete mais bon ...)
 
Voici les quelques lignes de codes en rapport avec mysql  
Sans ces lignes le programme fonctionne impecablement
 

Code :
  1. #include <mysql/my_global.h>
  2. #include <mysql/mysql.h>
  3. MYSQL *conn;//poignée de connexion
  4. MYSQL *erreur;//pour récupérer les erreurs
  5. const char *host;//nom de l'hôte
  6. const char *user;//login
  7. const char *passwd;//mot de passe
  8. const char *db;//base de données
  9. unsigned int port;//port de connexion sur le serveur
  10. const char *unix_socket;//bof :)
  11. unsigned long client_flag;//paramètre de flag client
  12. void connection_BdD(void)
  13. {
  14. host        = "locahost"; //localhost
  15. user        = "root"; //mon login
  16. passwd      = NULL; //je n'ai pas de mot de passe (pas bien :) )
  17. db          = "onligan"; //ma base de données se nomme onligan
  18. port        = 3306; //mon serveur est sur le port par défaut.
  19. //initialisation de la connection
  20. if((conn = mysql_init(NULL))==NULL)
  21. {
  22. printf("Mémoire insuffisante pour allouer une poignée de connection mysql\n" );
  23. exit(-1);
  24. }
  25. //connection sur le serveur
  26. if((erreur=mysql_real_connect(conn,host,user,passwd,db,port,NULL,0))==NULL)
  27. {
  28. printf("la connection sur le serveur a échoué !\n" );
  29. printf("cause : %s\n",mysql_error(conn));
  30. exit(1);
  31. }
  32. //déconnection du serveur
  33. mysql_close(conn);
  34. exit(-1);
  35. }


 
Autre petit detail qui a peut etre son importance
Lors de l'ibstallation de mysql-devel il a tous mis /usr/include/mysql/
or mysql.h va chercher my_config.h et dbug.h dans /usr/include, j'ai donc copie ces deux  fichiers au bon endroit.


Message édité par ffomnislash le 03-01-2005 à 00:21:12
Reply

Marsh Posté le 03-01-2005 à 00:27:59    

J'ai peut etre trouve ...
 
En fouillant un peu sur google je suis tombe sur:
 

Code :
  1. typedef struct st_mem_root MEM_ROOT;


 
Avec ca j'obtenais une erreur, type incomplet
J'ai alors essaye:
 

Code :
  1. typedef struct st_mem_root* MEM_ROOT;


 
et ca passe a la compilation.
 
Maintenant j'ai une erreur de linkage parce que je n'ai pas ajoute le lien pour mysql ds la ligne de compilation.
 
Je cherche ca et je confirme si la dolution ci dessus fonctionne


Message édité par ffomnislash le 03-01-2005 à 00:28:14
Reply

Marsh Posté le 03-01-2005 à 00:27:59   

Reply

Marsh Posté le 03-01-2005 à 00:31:17    

Essayes de regarder si "</usr/include/mysql/my_alloc.h" est bien présent.  
 
Essayes aussi en rajoutant "#include <mysql/my_sys.h>"


Message édité par ouned-coding le 03-01-2005 à 00:32:12
Reply

Marsh Posté le 03-01-2005 à 00:40:47    

my_alloc n'est pas present (ni dans include/ ni ds /include/mysql)
 
si j'inclu my_sys.h j'ai encore plus d'erreur de type n'etant pas declare. (my_boll par ex)
 
et sinon j'ai vu qu'il fallait ajouter -lmysqlclient lors de la compilation mais chez moi le compilateur me dit tout simplemen:

Code :
  1. /usr/bin/ld: ne peut trouver -lmysqlclient


 
:/


Message édité par ffomnislash le 03-01-2005 à 00:43:22
Reply

Marsh Posté le 03-01-2005 à 01:06:04    

Question bête, libmysqlclient et *-dev sont installés ?

Reply

Marsh Posté le 03-01-2005 à 01:09:55    

j'ai installe:
- mysql (descritpion: MySQL client programs and shared libraries. )
- mysql-devel
- mysql-server
 

[ffomnislash@Anubis ~]$ rpm -q mysql
mysql-3.23.58-13
[ffomnislash@Anubis ~]$ rpm -q mysql-devel
mysql-devel-3.23.58-13
[ffomnislash@Anubis ~]$ rpm -q mysql-server
mysql-server-3.23.58-13
 


Message édité par ffomnislash le 03-01-2005 à 01:12:15
Reply

Marsh Posté le 03-01-2005 à 02:23:09    

et que te renvoi 'cat /etc/ld.so.conf | grep libmysqlclient',
'ls  /usr/lib/mysql | grep libmysqlclient' ?

Reply

Marsh Posté le 03-01-2005 à 07:38:04    

[ffomnislash@localhost ~]$ cat /etc/ld.so.conf | grep libmysqlclient
[ffomnislash@localhost ~]$ ls  /usr/lib/mysql | grep libmysqlclient
libmysqlclient.a
libmysqlclient_r.a
libmysqlclient_r.so
libmysqlclient_r.so.10
libmysqlclient_r.so.10.0.0
libmysqlclient.so
libmysqlclient.so.10
libmysqlclient.so.10.0.0

Reply

Marsh Posté le 03-01-2005 à 08:46:29    

salut
 

Citation :

et que te renvoi 'cat /etc/ld.so.conf | grep libmysqlclient'


 
désolé, ptite erreur, c'est 'cat /etc/ld.so.conf | grep mysql' et si ca te donne rien de bon
 
essayes ça :
 

Citation :


]$ echo /usr/lib/mysql >> /etc/ld.so.conf
]$ ldconfig


 
 
Puis je crois que je vais aller faire un peu dodo aussi  
 
 :sweat: shutdown -h now

Reply

Marsh Posté le 03-01-2005 à 08:57:45    

Il fallait compiler avec -L/usr/lib/mysql
La lib n'etait pas au bon endroit :D
 
Sinon apparemment la definition du type MEM_ROOT semble etre bonne ;)
 
ouned-coding=> Tes en France ?


Message édité par ffomnislash le 03-01-2005 à 08:58:18
Reply

Marsh Posté le 03-01-2005 à 16:58:45    

Citation :

ouned-coding=> Tes en France ?


 
:lol:  
 
meme dans le pays basque (pays du jambon de bayonne)  
 

Reply

Marsh Posté le 03-01-2005 à 18:22:13    

et tu ne dors jamais ? :D

Reply

Marsh Posté le 04-01-2005 à 03:48:41    

Code :
  1. passwd      = NULL; //je n'ai pas de mot de passe (pas bien :) )


 :sweat:  
 
ben si t'as pas de mot de passe
 

Code :
  1. passwd = "" ;


 

Reply

Marsh Posté le 04-01-2005 à 13:19:33    

le mot de passe va arriver :D

Reply

Marsh Posté le 04-01-2005 à 13:28:26    

je veux dire attention à ne pas confondre NULL et chaine vide.  Enfin si tu veux être sûr que ça plante...
 

Reply

Marsh Posté le 04-01-2005 à 18:07:57    

ok  :jap:  
 
Je vais changer de suite alors.
 
Ceci dit ce code n'est pas de moi, je l'ai copie d'un site  :whistle:

Reply

Marsh Posté le 05-01-2005 à 22:38:03    

encore pire. et tu t'étonnes que ça fonctionne pas ?

Reply

Marsh Posté le 06-01-2005 à 09:45:01    

JagStang a écrit :

encore pire. et tu t'étonnes que ça fonctionne pas ?


Code :
  1. # const char *host;//nom de l'hôte
  2. # const char *user;//login
  3. # const char *passwd;//mot de passe
  4. # const char *db;//base de données
  5. # unsigned int port;//port de connexion sur le serveur
  6. # const char *unix_socket;//bof :)
  7. # unsigned long client_flag;//paramètre de flag client
  8. #
  9. #
  10. # void connection_BdD(void)
  11. # {
  12. #
  13. # host        = "locahost"; //localhost
  14. # user        = "root"; //mon login
  15. # passwd      = NULL; //je n'ai pas de mot de passe (pas bien :) )
  16. # db          = "onligan"; //ma base de données se nomme onligan
  17. # port        = 3306; //mon serveur est sur le port par défaut


 
c pas mal ce genre d'affectation :o

Reply

Marsh Posté le 06-01-2005 à 16:46:20    

effectivement il manque des malloc mais pourtant le code fonctionne parfaitement ...

Reply

Marsh Posté le 06-01-2005 à 17:41:54    

Il ne manque pas de malloc...
Ce sont des pointeurs et pas de tableaux de char...
 
 
passwd = "";
c'est pareil que
passwd = NULL;
et pareil que
passwd = 0;
et pareil que
passwd = "\0abcdefghijklmnopqrstuvwxyz";

Reply

Marsh Posté le 06-01-2005 à 23:02:19    

rolphin a écrit :


passwd = "";
c'est pareil que
passwd = NULL;


Euh, non ! La chaine "" existe, elle a une adresse non nulle, par contre c'est un tableau de 1 char qui vaut 0.

Citation :


et pareil que
passwd = 0;
et pareil que
passwd = "\0abcdefghijklmnopqrstuvwxyz";


Non, pas du tout.

passwd = NULL;


est pareil que

passwd = 0;


d'autre part,

passwd = "";


est pareil que

passwd = "\0abcdefghijklmnopqrstuvwxyz";



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-01-2005 à 09:27:08    

rolphin a écrit :


passwd = "";
c'est pareil que
passwd = NULL;
et pareil que
passwd = 0;
et pareil que
passwd = "\0abcdefghijklmnopqrstuvwxyz";


[:daplopbot]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed