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 :

requete Mysql en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut requete Mysql en C
    Bonsoir,

    j'essai de créer un programme en C me permettant de stocker des chaines de caractère en base de donnée.

    Pour cela, je me suis basé sur le programme suivant qui fonctionne:

    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
     
    /* pour integrer l'API WinSock on a le choix entre #include<winsock> et #define __LCC__ 
    dans le fichier mysql.h lignes 34(ça depend de la version) nous avons:
     
    #ifdef __LCC__
    #include <winsock.h> // For windows 
    #endif
     
    alors si on met #define __LCC__ cela engendre l'inclusion de winsock.h
    */
     
    #define __LCC__
    //#include <winsock.h>
     
    #include <stdio.h>
    #include "mysql.h" // guillemet pour dire que l'header est dans le répertoire courant du projet
    #include <conio.h>
    #include <time.h>
     
    MYSQL *mysqlconnexion;
    MYSQL_ROW myROW;
    MYSQL_RES *myRES;
     
    const char * hostname,*user,*password;
    unsigned int port;
     
    void sleep(int nbr_seconds);
     
    int main()
    {
    //initialisation des parametres de connexion
    hostname="localhost";
    user="root";
    password=""; // => pas de password pour l'utilisateur
    port=3306;
    //initialisation du gestionnaire de la connexion à la base de données mySQL
    mysqlconnexion=mysql_init(NULL);
    		if(!mysqlconnexion) 
    		{
    			printf("Echec de l'initialisation du gestionnaire de la connexion mysql\n");
    			return -1;
    		}  
    		printf("Initialisation du gestionnaire de la connexion mysql avec succes\n");
     
           //tentative de connexion au serveur mySQL
     
    		if (!mysql_real_connect(mysqlconnexion,hostname,user,password,NULL,port,NULL,0))
    		{
                    printf("Echec lors de la tentative de connexion au serveur mySQL\n");
    				return -1;
            }
            printf("Connexion au serveur mySQL reussie\n");
     
           // execution d'un simple requête pour récuperer l'ensemble des bases de données
            mysql_query(mysqlconnexion,"show databases");
     
           //initialisation du jeu de résultats et l'enregistre dans le client		
    		myRES = mysql_store_result(mysqlconnexion);
     
    		if (myRES) 
    		{
              //parcours de l'ensemble des lignes du resultat myRES 
    		  for(unsigned int i = 0; i < myRES->row_count /*nombre de lignes dans la structure du resultat*/; i++) 
    		  {
               myROW = mysql_fetch_row(myRES);
                 for(unsigned int j = 0; j < mysql_num_fields(myRES)/*nombre de champs(colonnes) dans une ligne du resultat*/; j++)
    			 {
                    //affichage de la valeur du J ème champs de la ligne en cours du resultat. 
    				 printf("%s   ", myROW[j]);
    			 }
    		   //retour à la ligne aprés affichage des valeurs de tous les champs de ligne en cours du resultat myRES
    		   printf("\n");
    		  }
              //Libèration de la mémoire allouée au résultat myRES
              mysql_free_result(myRES);
    		}
           // fermeture de la connexion et libèration du pointeur de connexion mysqlconnexion
            mysql_close(mysqlconnexion);
            return 0;
    }
    Mais, peut-on me dire comment accéder à une table dans ma base de donnée? Puis un champ de la table? (lire ce champs par exemple).

    J'ai consulté ce lien: http://dev.mysql.com/doc/refman/5.0/...-overview.html
    qui détail pas mal des possibilité avec l'header mysql.h

    Mais je ne trouve pas la syntaxe des fonctions mysql_querry(....).
    En php, il suffit de faire INSERT .... .... mais là? Quelqu'un pourrait m'expliquer ou me donner une de ces syntaxes en C?

    Merci beaucoup,
    Florian

  2. #2
    Membre éprouvé
    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
    Par défaut
    t'as de la peau de saucisson qui s'est formée devant les yeux apparement.
    un post ( http://www.developpez.net/forums/sho...d.php?t=285460 ) sur cette page, repond a ta question ...
    et plusieurs autres en utilisant la fonction rechercher.
    et meme d'autres reponses plus completes sur dev.mysql.com

    c'est pas genant de rien y voir comme ça pour coder?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    ben j'essai de m'en servir... j'ai essayé ça:

    mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES('valeur 1', 'valeur 2', 'etc')");

    mais je ne m'en sors pas ! rien ne se passe dans ma BDD... De quel type doit être le champ de la BDD? si je le met en TEXT... ça devrais me sauvergarder les values en texte non?

    Pour parler la france comme toi:
    j'ai une couille dans le patté !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    j'ai réussi à faire fonctionner ma requète.

    Mais je ne trouve pas comment faire pour dans cette requètte intégrer une chaine de caractère (variable) à la place d'une donnée brut

  5. #5
    Membre éprouvé
    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
    Par défaut
    tu ne passe pas le nom de la database a utiliser a mysql_real_connect.
    tu es sur de vouloir te connecter a ta base par default? (et accessoirement, sur que la base par default est celle que tu veux)
    tu as verifié les valeurs de retour de tes fonctions?

    de plus, je trouve ton code vraiment brouillon. des globales inutiles ... du merdier avec les .h ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Bonjour et merci d'avoir répondu.

    Effectivement, pour mon code, il y a une déclaration de fonction inutile (j'ai supprimé la fonction mais pas sa déclaration).

    Oui, je ne lui indique pas ma base par défauts, mais c'est une erreur de ma part car je faisait des tests. Voici mon code actuel :
    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
     
    /* pour integrer l'API WinSock on a le choix entre #include<winsock> et #define __LCC__ 
    dans le fichier mysql.h lignes 34(ça depend de la version) nous avons:
     
    #ifdef __LCC__
    #include <winsock.h> // For windows 
    #endif
     
    alors si on met #define __LCC__ cela engendre l'inclusion de winsock.h
    */
     
    #define __LCC__
    //#include <winsock.h>
     
    #include <stdio.h>
    #include "mysql.h" // guillemet pour dire que l'header est dans le répertoire courant du projet
    #include <conio.h>
    #include <time.h>
     
    MYSQL *mysqlconnexion;
    MYSQL_ROW myROW;
    MYSQL_RES *myRES;
     
    const char * hostname,*user,*password;
    unsigned int port;
     
    char variable_essai;
     
    int main()
    {
    //initialisation des parametres de connexion
    hostname="localhost";
    user="root";
    password=""; // => pas de password pour l'utilisateur
    port=3306;
    //initialisation du gestionnaire de la connexion à la base de données mySQL
    mysqlconnexion=mysql_init(NULL);
    		if(!mysqlconnexion) 
    		{
    			printf("Echec de l'initialisation du gestionnaire de la connexion mysql\n");
    			return -1;
    		}  
    		printf("Initialisation du gestionnaire de la connexion mysql avec succes\n");
     
           //tentative de connexion au serveur mySQL
     
    		if (!mysql_real_connect(mysqlconnexion,hostname,user,password,"localhost",port,NULL,0))
    		{
                    printf("Echec lors de la tentative de connexion au serveur mySQL\n");
    				return -1;
            }
            printf("Connexion au serveur mySQL reussie\n");
     
    		// Modification d'un champ, ajout de valeurs en table
     
    		mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES('le')"); // Marche !!
     
    		// je bloque pour le code ici !!
    		variable_essai='l';
    		mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES (%c)",variable_essai);
     
           // execution d'un simple requête pour récuperer l'ensemble des bases de données
     
    		mysql_query(mysqlconnexion,"show databases");
     
           //initialisation du jeu de résultats et l'enregistre dans le client		
    		myRES = mysql_store_result(mysqlconnexion);
     
    		if (myRES) 
    		{
              //parcours de l'ensemble des lignes du resultat myRES 
    		  for(unsigned int i = 0; i < myRES->row_count /*nombre de lignes dans la structure du resultat*/; i++) 
    		  {
               myROW = mysql_fetch_row(myRES);
                 for(unsigned int j = 0; j < mysql_num_fields(myRES)/*nombre de champs(colonnes) dans une ligne du resultat*/; j++)
    			 {
                    //affichage de la valeur du J ème champs de la ligne en cours du resultat. 
    				 printf("%s   ", myROW[j]);
    			 }
    		   //retour à la ligne aprés affichage des valeurs de tous les champs de ligne en cours du resultat myRES
    		   printf("\n");
    		  }
              //Libèration de la mémoire allouée au résultat myRES
              mysql_free_result(myRES);
    		}
           // fermeture de la connexion et libèration du pointeur de connexion mysqlconnexion
            mysql_close(mysqlconnexion);
            return 0;
    }
    Donc comme indiqué dans mon code je ne sais pas comment envoyer une variable dans le VALUES du INSERT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES (%c)",variable_essai);
    J'avais essayé ça, mais apparement ça ne fonctionne pas... Quelle est la syntaxe?

    Merci beaucoup,
    Florian

  7. #7
    Membre éprouvé
    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
    Par défaut
    j'ai pas l'impression que mysql_query puisse prendre autre chose qu'un const char*.
    tu dois passer par un snprintf pour former ta chaine, et donner ta chaine a mysql_query.
    [QUOTE=bontempf]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    snprintf(query_buff,sizeof(query_buff),"INSERT INTO champ1 VALUES (%c)",variable_essai);
    mysql_query(mysqlconnexion,query_buff);
    donne la requete:
    INSERT INTO champ1 VALUES (l)

    tu souhaite:
    INSERT INTO champ1 VALUES ('l')

    la syntaxe est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    snprintf(query_buff,sizeof(query_buff),"INSERT INTO champ1 VALUES ('%c')",variable_essai);
    mysql_query(mysqlconnexion,query_buff);

  8. #8
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par bontempf
    j'ai essayé ça:

    mysql_query(mysqlconnexion,"INSERT INTO champ1 VALUES('valeur 1', 'valeur 2', 'etc')");

    mais je ne m'en sors pas !
    En C on n'écrit pas plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO champ1 VALUES(\'valeur 1\', \'valeur 2\', \'etc\')"
    ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Citation Envoyé par Melem
    En C on n'écrit pas plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO champ1 VALUES(\'valeur 1\', \'valeur 2\', \'etc\')"
    ?
    Je ne savais pas ... J'en prend note . Merci

    Citation Envoyé par Melem
    C'est pas dans le forum SQL ou quelque chose du genre que tu devrais poser cette question?
    Bien à vrai dire, je ne sais pas trop, car mon programme est en C et ma base en MYSQL. Vu que j'avais déjà ouvert un topic ICI, je ne comptais pas en ouvrir un autre. Peut-être que Dark_Ebola pourras me répondre, sinon j'ouvrirais un autre topic dans le forum SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT PRENOM, AGE, SEX, SUIVI FROM CLIENTS WHERE (NOM = \'Dupont\'"
    Merci
    => La base de donnée va donc me sauvegarder les données dans l'ordre rentré?


    Merci beaucoup,
    Florian

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Bonsoir,

    La pluparts de mes requètes SQL fonctionnent. Il y en a une qui me pose problème, c'est celle qui permet de récupérer les enregistrements. J'ai codé cette fonction :

    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
     
     
    void recup_patient(CString m_load_nom2,CString m_load_prenom2)
    {
    	unsigned int i = 0;
    	unsigned int num_champs = 0;
     
    	//Requête qui sélectionne tout dans ma table scores
    	//Structure de la requète: "SELECT PRENOM, AGE, SEX, SUIVI FROM CLIENTS WHERE (NOM = \'Dupont\'"
    	_snprintf(query_buff,sizeof(query_buff),"SELECT * FROM PATIENT WHERE (nom = '%s', prenom = '%s')",m_load_nom2,m_load_prenom2);
    	mysql_query(mysqlconnexion,query_buff);
     
    	//On met le jeu de résultat dans le pointeur result
    	myRES = mysql_use_result(mysqlconnexion);
     
    	//On récupère le nombre de champs
    	num_champs = mysql_num_fields(myRES);
     
    	//Tant qu'il y a encore un résultat ...
    	while ((myROW = mysql_fetch_row(myRES)))
    	{
    		//On fait une boucle pour avoir la valeur de chaque champs
    		for(i = 0; i < num_champs; i++)
    		{
    			//On ecrit toutes les valeurs
    			if (myROW[i])
    				MessageBox(NULL,myROW[i],"",MB_OK);
    				else
    				MessageBox(NULL,NULL,"",MB_OK);
    		}
    	}
    }
    Mais je ne comprend pas ou est le problème; je n'ai aucun problème de compilation.
    Le but étant de récupérer les valeurs de mes enregistrements pour le moment dans un MessageBox, et plus tard dans des variables.
    Merci d'avance,
    Flo

  11. #11
    Membre éprouvé
    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
    Par défaut
    Citation Envoyé par Melem
    En C on n'écrit pas plutôt comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO champ1 VALUES(\'valeur 1\', \'valeur 2\', \'etc\')"
    ?
    pourquoi faire?

    Peut-être que Dark_Ebola pourras me répondre, sinon j'ouvrirais un autre topic dans le forum SQL.
    c'est devenu un probleme de SQL, plus un probleme de C.
    donc la place de cette question est la section SQL
    je suis nul en SQL (jviens d'avoir un cours dessus en plus ... j'espere que mon prof lit pas le forum )
    mais pour te repondre vite fait, tu peux selectionner la ligne qui t'interresse en utilisant WHERE.
    SELECT * FROM CLIENT WHERE Nom=Dupont AND Prenom=Jacques

    pour la suite, je te conseille de demander aux pros du SQL

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Par défaut
    Merci beaucoup,

    je vais me renseigner dans la section SQL.

    Je reviendrais sur ce post si j'ai des problèmes de C

    @ bientôt

Discussions similaires

  1. résultat d'une requete mysql
    Par noinneh dans le forum MFC
    Réponses: 4
    Dernier message: 03/03/2005, 16h54
  2. arret requete mysql
    Par titiyo dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/10/2004, 17h40
  3. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  4. Requete MySql pour Mambo Open source
    Par azman0101 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/06/2004, 09h34

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