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

  FORUM HardWare.fr
  Programmation
  C

  [Resolu]API MYSQL erreur compilation

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu]API MYSQL erreur compilation

n°1893585
thanks33
Posté le 10-06-2009 à 12:49:21  profilanswer
 

Bonjour,
 
Voila mon souci je cherche a réaliser un connexion a une base de données mysql.
en suivant le tutoriel qui se trouve ici
 
mais malheureusement je me retrouve avec une erreur de compilation, et je comprend pas pourquoi.
 
Voici mon code :
 

Code :
  1. #include <winsock2.h>     /*socket*/
  2. #include <stdio.h>       /*printf*/
  3. #include <MYSQL/mysql.h>
  4. #define __WIN__
  5. #pragma comment(lib, "ws2_32.lib" )
  6. int main()
  7. {
  8. printf ("code appli:%s type serveur : %s\n",code_appli,type_serveur);
  9. //Déclaration du pointeur de structure de type MYSQL
  10.     MYSQL mysql;
  11.         //Initialisation de MySQL
  12.         mysql_init(&mysql);
  13.         //Options de connexion
  14.         mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option" );
  15.         //Si la connexion réussie...
  16.         if(mysql_real_connect(&mysql,"localhost","thanks","thanks","atos",0,NULL,0))
  17.         {
  18.             //Requête qui sélectionne tout dans ma table scores
  19.             mysql_query(&mysql, "SELECT * FROM historique" );
  20.             //Déclaration des pointeurs de structure
  21.             MYSQL_RES *result = NULL;
  22.             MYSQL_ROW *row = NULL;
  23.             unsigned int i = 0;
  24.             unsigned int num_champs = 0;
  25.             //On met le jeu de résultat dans le pointeur result (maintenant on utilise mysql_store_result
  26.             result = mysql_store_result(&mysql);
  27.             //On récupère le nombre de champs
  28.             num_champs = mysql_num_fields(result);
  29.             //Tant qu'il y a encore un résultat ...
  30.             while ((row = mysql_fetch_row(result)))
  31.             {
  32.                 //On déclare un pointeur long non signé pour y stocker la taille des valeurs
  33.                 unsigned long *lengths;
  34.                 //On stocke cette taille dans le pointeur
  35.                 lengths = mysql_fetch_lengths(result);
  36.                 //On fait une boucle pour avoir la valeur de chaque champs
  37.                for(i = 0; i < num_champs; i++)
  38.                {
  39.                    //On ecrit toutes les valeurs
  40.                    printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL" );
  41.                }
  42.                printf("\n" );
  43.             }
  44.             //Libération du jeu de résultat
  45.             mysql_free_result(result);
  46.             //Fermeture de MySQL
  47.             mysql_close(&mysql);
  48.         }
  49.         else  //Sinon ...
  50.         {
  51.             printf("Une erreur s'est produite lors de la connexion à la BDD!" );
  52.         }
  53. }
  54. }


 
 
 
 
voici les erreurs :
 
- ligne :
 
 

Code :
  1. while ((row = mysql_fetch_row(result)))


 
erreur:  
 
cannot convert 'char**' to 'char***'in assignment
 
 
 
- ligne :  
 

Code :
  1. printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL" );


 
 
erreur:  
 
conditionnal expresion bewtewn distinc pointer type 'char**'and 'const char*' lacks a cast
 
 
Cordialement


Message édité par thanks33 le 11-06-2009 à 11:19:22
mood
Publicité
Posté le 10-06-2009 à 12:49:21  profilanswer
 

n°1893596
olivthill
Posté le 10-06-2009 à 13:11:48  profilanswer
 

Remplacer

MYSQL_ROW *row = NULL;

par

MYSQL_ROW row;

n°1893979
thanks33
Posté le 11-06-2009 à 09:38:42  profilanswer
 

merci pour ta réponse.
 
mais j'ai un nouveau problème
 
 
lors que j'envoie les variables :type_serveur,code_appli
 

Code :
  1. if (mysql_query(conn, "SELECT C.IP_SERVEUR FROM comporter C  INNER JOIN serveur S ON ((C.IP_SERVEUR = S.IP_SERVEUR AND  S.TYPE_SERVEUR = type_serveur) AND C.CODE_APPLICATION = code_appli)" ))


 
 dans ma requête sql, il ne la prend pas en compte est c'est très gênent
 

Code :
  1. #include <winsock2.h>     /*socket*/
  2. #include <stdio.h>       /*printf*/
  3. #include <MYSQL/mysql.h>
  4. #define __WIN__
  5. #pragma comment(lib, "ws2_32.lib" )
  6. int main()
  7. {
  8. WSADATA WSAData;
  9. WSAStartup(MAKEWORD(2,0), &WSAData);
  10. SOCKET sock;
  11. SOCKET csock;
  12. SOCKADDR_IN sin;
  13. SOCKADDR_IN csin;
  14. char buffer[BUFSIZ];;
  15. sin.sin_addr.s_addr = htonl(INADDR_ANY);
  16. sin.sin_family      = AF_INET;
  17. sin.sin_port        = htons(10000);
  18. sock = socket(AF_INET,SOCK_STREAM,0);
  19. bind(sock, (SOCKADDR *)&sin, sizeof(sin));
  20. listen(sock,0);
  21. while(1)
  22.     {
  23.              /* connection socket */
  24. int sinsize = sizeof(csin);
  25. csock = accept(sock, (SOCKADDR *)&csin, &sinsize);
  26.    memset(buffer, '\0', sizeof(buffer)); /*on vide le buffer*/
  27.    recv(csock, buffer, sizeof(buffer), 0);
  28.      char *pointeur;
  29. char *separateur = { "-" }; // Le séparateur
  30. char *code_appli= NULL;
  31. char *type_serveur= NULL;
  32. // premier appel,
  33. pointeur = strtok( buffer, separateur );
  34. code_appli = ("%s",pointeur);
  35. while( pointeur != NULL )
  36. {
  37. // Cherche les autres separateur
  38. pointeur = strtok( NULL, separateur );
  39. if ( pointeur != NULL )
  40. {
  41.      
  42.   type_serveur = ("%s",pointeur);
  43. }
  44. }
  45. //printf ("code appli: %s type serveur : %s\n",code_appli,type_serveur);
  46.    MYSQL *conn;
  47.    MYSQL_RES *res;
  48.    MYSQL_ROW row;
  49.    char *server = "localhost";
  50.    char *user = "thanks";
  51.    char *password = "thanks";
  52.    char *database = "atos";
  53.  
  54.    conn = mysql_init(NULL);
  55.  
  56.    /* Connect to database */
  57.    if (!mysql_real_connect(conn, server,
  58.          user, password, database, 0, NULL, 0)) {
  59.       fprintf(stderr, "%s\n", mysql_error(conn));
  60.       return(0);
  61.    }
  62.  
  63.    if (mysql_query(conn, "SELECT C.IP_SERVEUR FROM comporter C  INNER JOIN serveur S ON ((C.IP_SERVEUR = S.IP_SERVEUR AND  S.TYPE_SERVEUR = type_serveur) AND C.CODE_APPLICATION = code_appli)" ))
  64.    {
  65.       fprintf(stderr, "%s\n", mysql_error(conn));
  66.       system ("pause" );
  67.       return(0);
  68.    }
  69.    res = mysql_use_result(conn);
  70.  
  71.    while ((row = mysql_fetch_row(res)) != NULL)
  72.    {
  73.      
  74.      // printf ("code appli: |%s| type serveur : |%s|\n",code_appli,type_serveur);
  75.       char *result = row[0];
  76.      
  77.       printf("%s \n",result);
  78.      
  79.    }
  80.    /* Release memory used to store results and close connection */
  81.    mysql_free_result(res);
  82.    mysql_close(conn);
  83. }
  84. }


 
le programme compile, mais voici ce qu'il m'affiche.
 
 
 Erreur :Unknown column 'code_appli' in 'on clause'
 
Pouvez-vous m'aider s'il vous plait
Cordialement


Message édité par thanks33 le 11-06-2009 à 09:42:24
n°1894023
olivthill
Posté le 11-06-2009 à 10:36:33  profilanswer
 

Il n'est pas possible d'utiliser mysql_query() avec des données variables. Il faut lier ces variables. En anglais cela s'appelle avoir des bind variables. Avec MySQL, il faut donc utiliser une demi douzaines de lignes pour faire un simple Select. Voir http://dev.mysql.com/doc/refman/6. [...] types.html
 
Une autre solution consiste à faire :

char sql_query[1000];
sprintf(sql_query, "SELECT C.IP_SERVEUR FROM comporter C "
                   " INNER JOIN serveur S ON "
                   " ((C.IP_SERVEUR = S.IP_SERVEUR AND  S.TYPE_SERVEUR = '%s') "
                   " AND C.CODE_APPLICATION = '%s')",
                   type_serveur, code_appli);
if (mysql_query(conn, sql_query))

n°1894035
thanks33
Posté le 11-06-2009 à 10:55:50  profilanswer
 

Merci beaucoup de ton aide, sa doit bien faire 3 heure que je bloque sur ce problème.
 
Trop l'habitude des langages objet =)
 
Merci encore
Cordialement


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

  [Resolu]API MYSQL erreur compilation

 

Sujets relatifs
[HTML] creer un message d'erreurError Javascript:"Object Required"- 5 lignes de code [RESOLU]
[résolu]Problème de vérification d'un entierErreur de compilation VBA Access
[RESOLU]Fermer une JFrame depuis un Bouton dans un Panel[NON RESOLU] Firefox et scrollTo : un drôle de comportement
Erreur suite à la création d'une DLL[Resolu]Serveur Multi Thread en C
import/export data base mysql 
Plus de sujets relatifs à : [Resolu]API MYSQL erreur compilation


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR