IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme C/SQL !


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Probleme C/SQL !
    Salut, j'ai un probleme pour insert des valeurs dans une base SQL en c !

    J'ai toujours la meme erreur ki ressort alors ke je pense avoir la bonne requete ...

    J'ai tester de faire la meme requete sur ma database mais la main et ca marche ...
    Je me demande si ce n est pas un probleme avec mes sscanf et un pti caractere ki doit trainer...


    vla le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     char timestamp[5][20];
       char myid[50];
       char cattid[5];
       char number[2];
       char index[4];
       char type[4];
       char time[100];
       p1=p1+12;
       p2=p2+17;
       *p2=0;
       sscanf(p1,"%s",myid);
       p1=p1+76;
       p2=p1+5;
       *p2=0;
       sscanf(p1,"%s",catid);
       p1=p1+13;
       p2=p1;
       while (*p2!=',') {p2++;}
       *p2=0;
       sscanf(p1,"%s",number);
       p1=p2+14;
       p2=p1;
       while (*p2!=' ') {p2++;}
       *p2=0;
       sscanf(p1,"%s",timestamp[1]);
       p1=p2+1;
       while (*p2!=' ') {p2++;}
       *p2=0;
       sscanf(p1,"%s",timestamp[2]);
       p1=p2;
       p1++;
       p2=p2+3;
       *p2=0;
       sscanf(p1,"%s",timestamp[3]);
       p1=p2+1;
       p2++;
       while (*p2!=' ') {p2++;}
       *p2=0;
       sscanf(p1,"%s",timestamp[4]);
       p1=p2+1;
       while (*p2!=' ') {p2++;}
       *p2=0;
       sscanf(p1,"%s",timestamp[5]);
       p1=p2+8;
       while (*p2!='\"') {p2++;}
       *p2=0;
       sscanf(p1,"%s",index);
       p1=p2+8;
       while (*p2!=' ') {p2++;}
       *p2=0;
       sscanf(p1,"%s",type);
       p1=p2+1;
     
       sprintf(time,"%s-%s-%s-%s-%s",timestamp[1],timestamp[2],timestamp[3],timestamp[4],timestamp[5]);
       printf("Time[%s]\n",time);
       printf("Let's put it in the database! :D\n");
       sprintf(mysqlcmd,"INSERT INTO table (id,serial,type,catid,number,time,index) VALUES ('%s','%s','%s','%s','%s','%s','%s')",myid,serial,type,catid,number,time,index);
       mysql();
     
    }
    int mysql() {
      FILE *fp;
      int k;
     char *realquery=mysqlcmd;
      printf("Test query=[%s]\n",realquery);
      MYSQL mysql;
     
      mysql_init(&mysql);
      char host[]="kifak";
      char user[]="yalla";
      char passwd[]="passwd";
      char db[]="tamam";
      unsigned int port=3306;
      if(!mysql_real_connect(&mysql,
                              host,
                              user,
                              passwd,
                              db,
                              port,
                              NULL,
                              0))
      fprintf(stderr, "Failed to connect to database: Error: %s\n",
      mysql_error(&mysql));
      printf("Mysql Query [%s]",realquery);
      printf("Connection successfull!!\n");
      k=mysql_real_query(&mysql,realquery,sizeof(realquery));
      if (k==0) {printf("Query SuccessFuLL !! :D\n");}
      else {printf("Query FAILED !! :(\n",k);printf("Failed to query database: Error: %s\n",mysql_error(&mysql));}
    }
    Et voila l erreur ke mysql me sort !!

    Mysql Query [INSERT INTO table (id,serial,type,catid,number,time,indexl) VALUES ('0023','00904C600023','pnt','8BAB','3','Thu-Aug-3-09:22:25-2000','-63')]

    Connection successfull!!
    Query FAILED !!
    Failed to query database: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSE' at line 1


    La query est bonne ...
    mon printf renvoie ca (sans espace, sans caracteres bizarre...):

    Mysql Query [INSERT INTO table (id,serial,type,catid,number,time,index) VALUES ('0023','00904C600023','pnt','8BAB','3','Thu-Aug-3-09:42:26-2000','-63')]

    Vous avez un idée d ou ca peut venir ??

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Mysql Query [INSERT INTO table (id,serial,type,catid,number,time,indexl)
    Le pipe après l'index n'est-il pas en cause ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Non, c une erreur de frappe :/

    Mais en fait a chak fois ke j essaye de sprintf une valeur meme sans mettre de variable dedans genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char realquery[200];
     
     
    sprintf(realquery,"INSERT INTO table(id,pouet,type,pa,tric,time,index) VALUES ('45FG','000E35A763B7','pnp','9054','2','10-jan-2004','-78')");
     
    et 
     
    k=mysql_real_query(&mysql,realquery,sizeof(realquery));
      if (k==0) {printf("Query SuccessFuLL !! :D\n");}
      else {printf("Query FAILED !! :(\n",k);printf("Failed to query database: Error: %s\n",mysql_error(&mysql));}
    ca fail tout le temps !! :/[/code]

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Par contre si je declare mon realquery comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char realquery[]="INSERT INTO table(id,qsd,tdds,tryr,popo,titi,sisi) VALUES ('45FG','000E35A763B7','pnp','9054','2','10-jan-2004','-78')";
    ca marche !!

    Y a un pti probleme de déclaration je pense mais je vois aps comment le résoudre !!

    si je declare en char realquery[200] et ke je sprintf une valeur dedans, ca bug, anyway

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Please, aidez moi, je suis kéblo, je vais faire voler mon laptop et le serveur SQL par la fenetre

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Le problème ne vient peut être pas de ton sprintf mais de ton serveur SQL.

    Puisque en le déclarant en dur (ie char query[] = " ... "), ça fonctionne, il n'y a pas de raison.

    Néanmoins, j'en vois peut être une, ta chaine est plus grande que prévu et même si sprintf rajoute un \0 à la fin de ce qu'il a écrit dans la chaîne, peut-être que la requête est interprétée avec ce qui s'y trouve après.

    Ce n'est qu'une suppostion, je n'en sais rien en fait.

  7. #7
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    En regardant un peu la doc de mysql je suis tombé sur ceci, ça confirme bien ce que je disais :

    Vous devez utiliser mysql_real_query() au lieu de mysql_query() pour les requêtes qui continent des données binaires, car celles-ci peuvent contenir le caractère‘\0’. De plus, mysql_real_query() est plus rapide que mysql_query() car elle n'invoque pas strlen() sur la chaîne contenant la requête.
    C'est donc pour cela que la première fois ça fonctionne (en le faisant en dur) et pas en le faisant avec sprintf.

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    k=mysql_real_query(&mysql,realquery,sizeof(realquery));
    Bah le probleme c ke c bien ce ke j'utilise !

    J'ai deja vu ca sur la doc de mysql et j'ai essayer les deux sans succès :/
    Le pire c ke y a vraiment rien kom doc sur le net pour ce genre de requete, on peut trouver (difficilement) de la doc pour afficher la base mais pour INSERT des données ki change, personne l'a fait ou alors personne l'a expliké :/

    Je vous explikerai bien moi kan ca marchera

  9. #9
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je t aime mon ami !!!


    Merciiiii

    ca marche avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sprintf(mysqlcmd,"INSERT INTO table (id,serial,type,catid,number,time,index) VALUES ('%s','%s','%s','%s','%s','%s','%s')\0",myid,serial,type,catid,number,time,index); 
     
    k=mysql_query(&mysql,realquery);

  10. #10
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Je t aime mon ami !!!
    Pas tant, un simple merci suffit !

    sprintf(mysqlcmd,"INSERT INTO table (id,serial,type,catid,number,time,index) VALUES ('%s','%s','%s','%s','%s','%s','%s')\0",myid,serial,type,catid,number,time,index);
    Le \0 à la fin de ta chaine n'est pas obligatoire, sprintf le met pour toi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  2. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  3. problemes exercices sql
    Par siciliano_messinese dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/09/2005, 16h52
  4. [JDBC]Probleme curseur SQL
    Par Welldone dans le forum JDBC
    Réponses: 13
    Dernier message: 11/07/2005, 16h57
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo