Discussion: Connexion MySQL -C

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut Connexion MySQL -C

    Bonjour tout le monde,

    Je suis débutante dans le domaine de base de données et j'ai besoin un peu d'aide SVP.

    Je veux connecter à une base de données MySQL à partir d'un code en C. j'ai testé ce simple 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
     
    void main()
    {
     
        char requete[200]="";
        MYSQL mysql;
        mysql_init(&mysql);
        mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "options");
     if (mysql_real_connect(&mysql, "localhost","usr" ,"pswd","BD", 0, NULL, 0))
        {
           sprintf (requete, "INSERT INTO  VALUES ( '229', '12', '58')" );
           printf("%s\n", requete);
           printf("Connexion réussie !\n");
           mysql_query (&mysql, requete);
           mysql_close(&mysql);
     
          }
     else
        {
            printf("CONNEXION TO THE DATABASE FAILED \n");
        }
    }
    En lançant le code, deux msgs affichant la requête et "connexion établie" s'affichent mais quand je reviens à la base, rien n'est inséré. La base n'a pas été affecté par cette requête.


    Je ne comprends pas !!!

    PS: j'utilise Code::Blocks 16.01 et MySQL 5.7.18 (je travaille avec les commandes de ligne de client)
    Quelqu'un pourrait m'aider si c possible .

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    février 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : février 2011
    Messages : 239
    Points : 161
    Points
    161

    Par défaut

    Citation Envoyé par abyass Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           sprintf (requete, "INSERT INTO  VALUES ( '229', '12', '58')" );
    Il faut préciser le nom de la table dans laquelle insérer les données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           sprintf (requete, "INSERT INTO MA_TABLE VALUES ( '229', '12', '58')" );

  3. #3
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : mai 2017
    Messages : 279
    Points : 419
    Points
    419

    Par défaut

    Une précision: rassures-toi de l'ordre des champs lors de l'insertion ou le mieux est de les préciser.
    tu as:
    sprintf (requete, "INSERT INTO MA_TABLE VALUES ( '229', '12', '58')" );
    Tu peux faire:
    sprintf (requete, "INSERT INTO MA_TABLE (hamp1, champ2,champ3) VALUES ( '229', '12', '58')" );
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  4. #4
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 997
    Points : 9 151
    Points
    9 151

    Par défaut

    Salut à tous.

    Voici un petit exemple d'interrogation d'une base de données à partir d'un programme écrit en 'C' :
    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
    #include <stdlib.h>
    #include <stdio.h>
     
    #include <winsock.h>
    #include <mysql.h>
     
    /*************************************/
    /*                                   */
    /*                                   */
    /*                                   */
    /*************************************/
     
    int main(void)
    {
    	unsigned int	i;
    	unsigned int	nbrChamps;
     
    	MYSQL		mysql;
    	MYSQL_RES	*result	= NULL;
    	MYSQL_ROW 	row		= NULL;
     
    	/*========================*/
    	/*     Initialisation     */
    	/*========================*/
     
    	mysql_init(&mysql);
     
    	/*========================================*/
    	/*     Connection à la Base de Donnée     */
    	/*========================================*/
     
    	if (mysql_real_connect(&mysql, "localhost", "test", "test", "test", 0, NULL, 0) == NULL)
    	{
    		printf("Une erreur s'est produite lors de la connexion à la BDD : %s\n", mysql_error(&mysql));
    		return 0;
    	}
     
    	/*===================================*/
    	/*     Interrogation de la Table     */
    	/*===================================*/
     
    	if (mysql_query(&mysql, "SELECT * FROM Tab_access") > 0)
    	{
    		printf("Problème d'interrogation de la table 'Tab_access' : %s\n", mysql_error(&mysql));
    		return 0;
    	}
     
    	result = mysql_use_result(&mysql);
     
    	/*============================*/
    	/*     Nombre de Colonnes     */
    	/*============================*/
     
    	nbrChamps = mysql_num_fields(result);
     
    	/*============================*/
    	/*     Vidage de la Table     */
    	/*============================*/
     
    	printf("\t\t\t+---------------------------------------+\n");
    	printf("\t\t\t|    vidage de la table 'tab_access'    |\n");
    	printf("\t\t\t+------+-----------+---+---+------------+\n");
     
    	while ((row = mysql_fetch_row(result)))
    	{
    		printf("\t\t\t");
    		for (i=0; i<nbrChamps; i++)		printf("| %s ", row[i]);
    		printf("|\n");
    	}
     
    	printf("\t\t\t+------+-----------+---+---+------------+\n\n");
     
    	/*===================*/
    	/*     Fermeture     */
    	/*===================*/
     
    	mysql_free_result(result);
    	mysql_close(&mysql);
     
    	return 0;
    }
    Pour répondre à votre question, il y a deux points que voici :
    1) votre requête d'insertion est incomplète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO  VALUES ( '229', '12', '58')
    Cela serait mieux si vous précisez d'une part le nom de la table et d'autre part le nom des colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO le_nom_de_votre_table (col1, col2, col33) VALUES ('229', '12', '58');
    2) je ne voie nulle part si vous êtes en mode transactionnel ou pas.
    Le mieux serait de préciser ceci :
    en début de votre programme. Cela signifie que vous allez gérer la validation ou le rejet de vos insertions.
    Puis lors d'une insertion, vous faites ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    start transaction;
    insert ...
    commit;
    Sans le commit, votre insertion ne sera pas validé et donc non présente dans votre table.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    Merci pour vos réponses.

    Il faut préciser le nom de la table dans laquelle insérer les données.
    J'ai précisé le nom de la table; c juste que j'ai mal copié le code ici et ça marche pas quand même.

    Voici un petit exemple d'interrogation d'une base de données à partir d'un programme écrit en 'C' :
    C'est tjs meme chose meme avec ce code. En lançant le code, les enregistrements de la table sont affichés mais la base ne change pas.

    je ne voie nulle part si vous êtes en mode transactionnel ou pas.
    Je viens de découvrir ces notions de transactions. Mais lorsque je les déclare, le compilateur affiche des erreur

    error: unkonwon type name 'set'/ 'start'
    error: 'commit' undeclared (first use in this function)



    Donc je me demande si y une bibliothèque à déclarer sachant que je travaille sur Code::Blocks.

    Merci d'avance

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    En fait pour mon premier code j'ai constaté que lorsque j'avance la commande de requête par rapport à celle de printf, rien ne s'affiche.


    Pour ce code: le msg ne s'affiche pas et la base ne change pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (mysql_real_connect(&mysql, "localhost","usr" ,"pswd","BD", 0, NULL, 0))
        {
           sprintf (requete, "INSERT INTO  VALUES ( '229', '12', '58')" );
           mysql_query (&mysql, requete);
           printf("%s\n", requete);
           printf("Connexion réussie !\n");
           mysql_close(&mysql);
     
     
          }
    Alors que pour ce code : le msg de printf s'affiche et la base ne change pas tjs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (mysql_real_connect(&mysql, "localhost","usr" ,"pswd","BD", 0, NULL, 0))
        {
           sprintf (requete, "INSERT INTO  VALUES ( '229', '12', '58')" );
           printf("%s\n", requete);
           printf("Connexion réussie !\n");
           mysql_query (&mysql, requete);
           mysql_close(&mysql);
     
          }
    Je ne comprends pas !!

    Lorsque je lance le mode debug, voici ce qui donne:
    Nom : Capture.PNG
Affichages : 50
Taille : 21,5 Ko

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    Re bonjour tt le monde ;

    Je reviens vers cette discussion une autre fois car mon problème persiste encore et j'ai réussi à le résoudre !!
    Avec n'importe quel exemple, la connexion s'établie mais la base reste inchangée. Et j'arrive pas à utiliser les transactions :/

    Quelqu'un pourra m'aider SVP !!

    Merci

  8. #8
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 997
    Points : 9 151
    Points
    9 151

    Par défaut

    Salut abyass.

    1) Vérifiez que vous avez bien accès à votre base de données et en particulier à votre table.
    Faites donc un select et voyez si cela fonctionne ou pas.

    2) Lorsque vous faites un insert, et que vous faites par la suite un select, vous verrez votre ligne dans la table, mais elle ne sera pas encore validée.
    Pour ce faire, vous devez utiliser le mode transactionnel.

    3) dans le fichier "my.ini" vérifiez que dans la section "[wampmysqld]", vous ayez ceci : "transaction-isolation = SERIALIZABLE".

    4) pour utiliser le mode transactionnel, lors de la connexion, vous devez vous assurer que vous êtes bien en "set autocommit = 0".
    --> https://dev.mysql.com/doc/refman/5.7...utocommit.html

    5) le démarrage du mode transactionnel se fait en utilisant les ordres de mysql :
    --> https://stackoverflow.com/questions/...tion-for-mysql

    Soit ouvrir le mode transactionnel par un "start transaction".

    6) la validation de vos insertions en 'C' se fait à partir de cette commande :
    --> https://dev.mysql.com/doc/refman/5.5...ql-commit.html

    Ou bien simplement par un "commit".

    7) le rejet de vos insertions en 'C' se fait à partir de cette commande :
    --> https://dev.mysql.com/doc/refman/5.5...-rollback.html

    Ou bien simplement par un "rollback".

    Je vous conseille de suivre les didacticiels de developpez sur mysql : https://mysql.developpez.com/cours/

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    Merci Artemus24 pour votre réponse.

    Vérifiez que vous avez bien accès à votre base de données et en particulier à votre table.
    Faites donc un select et voyez si cela fonctionne ou pas.
    J'ai essayé déjà SELECT et ça marche, j'arrive à accéder à ma base et ses tables.

    dans le fichier "my.ini" vérifiez que dans la section "[wampmysqld]", vous ayez ceci : "transaction-isolation = SERIALIZABLE".
    Je sais pas si c'est une chose évidente mais je trouve pas le fichier my.ini. Où je peux le trouver ??

    Mercii

  10. #10
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : mai 2017
    Messages : 279
    Points : 419
    Points
    419

    Par défaut

    Il est dans
    exemple:
    C:\wamp\bin\mysql\mysql5.6.17
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    Merci NAzoide pour votre réponse

    Il est dans
    exemple:
    C:\wamp\bin\mysql\mysql5.6.17
    j'ai même pas un fichier wamp dans C: !!

  12. #12
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : mai 2017
    Messages : 279
    Points : 419
    Points
    419

    Par défaut

    Tu as mysql à la place c'est normal. mets toi dans le dossier mysql et cherches my.ni
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    Tu as mysql à la place c'est normal. mets toi dans le dossier mysql et cherches my.ni
    D'accord, je viens de m'informer que wamp est une plateforme de développement.

    mais malgré je ne trouve pas encore my.ini
    Lorsque je tape dans recherche, je ne trouve rien.

    ça s'installe par défaut avec MySQL ou à nous de l'ajouter car je me suis tombé sur net sur .zip contenant my.ini donc je sait pas si je dois l'ajouter ?
    Et si oui, ou le mettre ??

    Mercii

  14. #14
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : mai 2017
    Messages : 279
    Points : 419
    Points
    419

    Par défaut

    ça s'installe par défaut avec MySQL ou à nous de l'ajouter car je me suis tombé sur net sur .zip contenant my.ini donc je sait pas si je dois l'ajouter ?
    Et si oui, ou le mettre ??
    Oui, par défaut.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  15. #15
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : mars 2015
    Messages : 75
    Points : 59
    Points
    59

    Par défaut

    D'accord. c'est bizarre alors que je le trouve pas !!

  16. #16
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : mai 2017
    Messages : 279
    Points : 419
    Points
    419

    Par défaut

    2.2.5.14. L'emplacement du fichier my.ini
    Dans les intallations MySQL antérieures à la version 4.1.5, il était de coutume de donner le nom de my.cnf au fichier de configuration du serveur, ou bien de le baptiser my.ini et de placer ce fichier dans c:\my.cnf ou c:\Windows\my.ini.

    Le nouvel assistant de configuration MySQL place le fichier my.ini dans le dossier d'installation du serveur MySQL. Cela permet d'associer le fichier de configuration avec la bonne instance du serveur.

    Pour s'assurer que le serveur MySQL sait où trouver le fichier my.ini, un argument similaire à celui-ci est passé durant l'installation du service : --defaults-file="C:\Program Files\MySQL\MySQL Server 4.1\my.ini", où C:\Program Files\MySQL\MySQL Server 4.1 est remplacé par le chemin de l'installation du serveur MySQL.

    L'option --defaults-file indique au serveur MySQL qu'il doit lire le fichier spécifié pour trouver les options de configuration.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

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

Discussions similaires

  1. [JSP] erreur lors d'une connexion à mySQL
    Par Jovial dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 31/08/2004, 17h48
  2. Erreur connexion mysql
    Par bodbod dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/07/2004, 10h28
  3. Connexion mysql
    Par olive.m dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 18/06/2004, 18h44
  4. [Connexion MySQL] Can't connect to MySQL server
    Par mat_dum dans le forum Outils
    Réponses: 12
    Dernier message: 17/07/2003, 08h49
  5. [Kylix] [cgi] pb déploiement appli avec connexion MySQL [rés
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 06/08/2002, 21h09

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