[Resolu]API MYSQL erreur compilation

API MYSQL erreur compilation [Resolu] - C - Programmation

Marsh Posté le 10-06-2009 à 12:49:21    

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
Reply

Marsh Posté le 10-06-2009 à 12:49:21   

Reply

Marsh Posté le 10-06-2009 à 13:11:48    

Remplacer

MYSQL_ROW *row = NULL;

par

MYSQL_ROW row;

Reply

Marsh Posté le 11-06-2009 à 09:38:42    

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
Reply

Marsh Posté le 11-06-2009 à 10:36:33    

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

Reply

Marsh Posté le 11-06-2009 à 10:55:50    

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

Reply

Sujets relatifs:

Leave a Replay

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