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 :

[MySQL]Créer une requète en utilisant une variable


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut [MySQL]Créer une requète en utilisant une variable
    Bonjour, [je sais, google est mon ami], je trouve que le net est pas tres riche concernant les tuto complets sur mysql...
    Alors je vous demande, comment faire pour faire une requete mysql comme ceci, en utilisant une variable dans le champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(&mysql, "UPDATE recherche SET essai1='MAVARIABLE');
    je sais que ma requete ne marche pas, et j'aimerais donc modifier le champ esssai1 par la valeur de MAVARIABLE qui est une variable (char[]).


    merci d'avance, a+


  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Salut,

    sprintf, A+
    K

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Lol merci mais tu pourrais me montrer ma requete avec sprintf car j'ai essayé ca et ca marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(&mysql, sprintf("UPDATE recherche SET essai1=%s", lien), lien);
    a+


  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Tu as mit un paramètre en trop. mysql_query ne prend que 2 paramètres il me semble.

    Construit ta chaine avant l'appel, avec sprintf. Par exemple une chaine "sqlQuery" crée comme tu l'as fait via sprintf. Ensuite, tu la passes en deuxième paramètre de mysql_query. Et tout devrait être bon

    A+
    K

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char lien[]="http://www.google.fr", requete[100]={0};
    sprintf(requete, "UPDATE recherche SET essai1=%s", lien);
    mysql_query(&mysql, requete);

    mais ca n'update rien !
    ma connection est bonne ! je peux meme insérer des données
    EDIT : horrible, bon programme m'affiche veuillez entrer une touchne pour continuer et rien d'autre, meme pas mon printf("bonjour"); !!

    Voila le code au complet :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock.h>
    #include <string.h>
    #include <C:\Dev-Cpp\include\mysql\mysql.h>
     
    int main(int argc, char *argv[])
    {
        printf("Bonjour");
      MYSQL mysql;
      mysql_init(&mysql);
      mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"avenos");
      mysql_real_connect(&mysql,"localhost","root","","mysql",0,NULL,0);
      char lien[]="http://www.google.fr", requete[100]={0};
      sprintf(requete, "UPDATE recherche SET essai1=%s", lien);
      printf("Requete : %s\n", requete);
      mysql_query(&mysql, requete);
      mysql_close(&mysql);
      system("PAUSE");	
      return 0;
    }
    je suis sous dev c++

    Aidez moi

  6. #6
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    j'ai pas regardé ton code en detail, mais voici un bout d'un de mes codes (que j'ai du recup quelque part sur le net)

    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
    MYSQL *
    do_mysql_connect (char *host_name, char *user_name, char *password,
    		  char *db_name, unsigned int port_num, char *socket_name,
    		  unsigned int flags)
    {
      MYSQL *conn;			/* pointer to connection handler */
     
      conn = mysql_init (NULL);	/* allocate, initialize connection handler */
      if (conn == NULL)
        {
          fprintf (stderr, "mysql_init() failed\n");
          return (NULL);
        }
      if (mysql_real_connect (conn, host_name, user_name, password,
    			  db_name, port_num, socket_name, flags) == NULL)
        {
          fprintf (stderr, "mysql_real_connect() failed:\nError %u (%s)\n",
    	       mysql_errno (conn), mysql_error (conn));
          return (NULL);
        }
      return (conn);		/* connection is established */
    }
     
    int
    main ()
    {
      char hostname[] = "my_host.com";
      char user_name[] = "my_uname";
      char password[] = "my_pass";
      char db_name[] = "my_db";
      unsigned int port = 64000;
      char query[1024];
      MYSQL *conn = NULL;
     
      conn = do_mysql_connect (hostname, user_name, password, db_name,
    			   port, NULL, 0);
      mysql_query (conn, "select id from userdb");
     
      snprintf (query, sizeof (query), "%s '%s'",
    			"UPDATE blahblah SET id = 2,lastcheck = now() WHERE ip =",
    			"127.0.0.1");
      mysql_query (conn, query);
      mysql_close (conn);
    }
    j'ai epuré mon code au maximum (viré les check etc), ça devrais encore marcher. et peut etre te permettre de trouver ce qui cloche dans ton code.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Non cela ne m'aide pas car je recherche juste comment faire passer une variable comme champ a modifié dans la requete et la aperement mon script change rien

    En plus la le probleme c'est que mon script n'execute rien meme pas un simple printf("BONJOUR") !

    Il se met en pause et c tout !

    aidez moi c'est vraiment bizarre !
    a+

  8. #8
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    et printf("bonjour\n"); ?
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Bonjour, j'ai résolu mon probleme, en fait mon projet etait pas dans le bon dossier...

    La j'ai un autre probleme,, je voudrais récupérer les donnes de cette requete :
    "SELECT * FROM recherche" et les afficher a l'écran
    j'ai essayé ca que j'ai trouvé sur ccpfrance mais ca marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mysql_query(&mysql, "SELECT essai1 FROM recherche");
     
      result = mysql_use_result(&mysql); 
     
            while((row = mysql_fetch_row(result))) { 
                    printf("%s",row[1]); 
                    fflush(stdout); 
            }

    merci de votre aide, a+

    (sujet n'est plus marqué résolu, vu que j'ai d'autres questions :p)
    a+

  10. #10
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    moi je fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      mysql_query (conn, "select essai1 from recherche");
      res = mysql_store_result (conn);
      if (res == NULL)
        {
          fprintf (sdterr,"error :: res is NULL\n");
          return -1;
        }
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Bonsoir, malheureusement, le code marcjhe pas ca me dit : NUlL quand je printf(" %s ", res);

    pourtant mon champ mysql n'est pas vide !!


    Voila 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock.h>
    #include <string.h>
    #include <C:\Dev-Cpp\include\mysql\mysql.h>
     
    int main(int argc, char *argv[])
    {
     
      MYSQL mysql;
      MYSQL_RES *res; 
      MYSQL_ROW row; 
      int t,r;
     
      mysql_init(&mysql);
      mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"avenos");
      mysql_real_connect(&mysql,"localhost","root","","mysql",0,NULL,0);
      mysql_query(&mysql, "SELECT essai1 FROM recherche");
      res = mysql_store_result (&mysql);
      printf("%s\n", res);
     
     
    printf("\n");
      mysql_close(&mysql);
      system("PAUSE");	
      return 0;
    }

    de plus, j'aimerais avoir les résultats de cette requete :
    SELECT * FROM recherche

    et avoir donc :

    Pour le champ essai1 : valeur1
    Pour le champ essai2: valeur2


    J'arrive vraiment pas merci d'avance de votre aide, bonne soirée !

  12. #12
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock.h>
    #include <string.h>
    //note: inclure mysql.h APRES winsock.h.
    #include <mysql/mysql.h>
     
    int main(int argc, char *argv[])
    {
     
       MYSQL mysql;
      MYSQL_RES *res; 
      MYSQL_ROW row; 
      unsigned long *lengths;
      int t,r,i,num_fields;
     
      mysql_init(&mysql);
      mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"avenos");
      mysql_real_connect(&mysql,"localhost","root","","mysql",0,NULL,0);
      mysql_query(&mysql, "SELECT essai1 FROM recherche");
      res = mysql_store_result (&mysql);
      if (res == NULL)
        {
          fprintf (sdterr,"error :: res is NULL\n");
          return -1;
        }
          num_fields = mysql_num_fields (res);
          while ((row = mysql_fetch_row (res)))
    	{
    	  lengths = mysql_fetch_lengths (res);
    	     for (i = 0; i < num_fields; i++)
    	     {
    	     printf ("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
    	     }
                 printf("\n");
             }
      mysql_close(&mysql);
      system("PAUSE");	
      return 0;
    }
    je n'ai pas envie de faire ton boulot, mais c'est presque ce que je suis en train de faire ...
    a l'epoque ou j'en ai eu besoin ... j'ai lut la doc officielle, et je m'en suis sorti ...
    essaye d'au moins tenir compte de ce que j'ai dis plus haut concernant les tests sur les retours de fonction.

    ça devrais marcher, SI j'ai rien oublié, SI ta requete est correcte, SI... SI ...
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  13. #13
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Par contre,
    serait mieux si c'était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          return EXIT_FAILURE;
    et si

    était

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          return EXIT_SUCCESS;
    Jc

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Voimla, stderr est marqué non défini dans la fonction docn ca plante !

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    J'ai vu dans le code un sdterr au lieu de stderr...

    PS: Et NON, ça ne PLANTE pas. Ça foire à la compilation. Apprends à appeler les choses par leur nom, SURTOUT les problèmes, car sinon on ne s'en sortira pas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    lapras, je trouve que tu abandonnes bien vite, et sans chercher bien loin la raison des plantages..

    A+
    K

  17. #17
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Salut,

    Je n'ai pas lu toutes les réponses, donc, le problème a peut etre déjà été soulevé... mais, il y a une erreur qui me choque énormément dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char lien[]="http://www.google.fr", requete[100]={0};
    sprintf(requete, "UPDATE recherche SET essai1=%s", lien);
    Le but du sprintf est de faire rentrer la "chaine de caractère" lien comme nouvelle valeur du champs essai1 de la table recherche...

    Or, l'une des première choses que l'on apprend en SQL, c'est que quand on doit travailler sur des chaines de caractères, il faut les mettre entre guillemets ou entre apostrophes... Ce qui n'est pas fait dans le cas présent...

    Je verrais beaucoup mieux la commande sprintf sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(requete, "UPDATE recherche SET essai1=\'%s\'", lien);
    voire, comme de nombreuses tables ont leurs noms (et les noms des champs) protégés par ``
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(requete, "UPDATE \`recherche\` SET \`essai1\`=\'%s\'", lien);
    Enfin, c'est un avis perso
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  18. #18
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Le caractère " ' " peut ne pas être échappé avec " \ " dans une chaine de caractères.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  19. #19
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Citation Envoyé par seriousme
    Le caractère " ' " peut ne pas être échappé avec " \ " dans une chaine de caractères.
    De fait...

    Par contre, une chaine de caractères doit etre entourée de quotes, simple ou double, au choix, dans une requete SQL...

    C'était surtout sur ce fait que je voulais attirer l'attention
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Ok merci beaucoup, j'ai tenu compte de toutes vos indications et ca marche !

    dernier probleme :
    cette ligne marche mais je ne la comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf ("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
    alors déja y'a ca : [%.*s] ==> pourquoi un ' . ' apres le ' % ' ?

    Apres y'a le sorte de if que j'ai pas tres bien compri !

    (int) lengths[i], row[i] ? row[i] : "NULL"

    alors la dedans on demande d'afficher la variable :
    lengths[i] et , une sorte de if avec row[i] ?!

    c'est un peu confus merci d'avance , a+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/05/2010, 14h12
  2. [AC-2003] Numéroter les doublons dans une requête en utilisant une fonction VBA
    Par maldan dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/09/2009, 16h46
  3. Réponses: 1
    Dernier message: 23/09/2009, 15h38
  4. Réponses: 11
    Dernier message: 23/09/2008, 13h16
  5. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00

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