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 :

[API MySQL] crash dans la fonction mysql_use_result


Sujet :

C

  1. #1
    Membre averti
    Avatar de marshiell
    Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 338
    Points
    338
    Par défaut [API MySQL] crash dans la fonction mysql_use_result
    Salut,

    j'essaye de me connecter à distance à ma base de donnée. La connexion fonctionne, cependant le programme crash dès l'appel de la fonction mysql_use_result(&mysql) à la ligne 48 (j'ai vérifié avec le debugger etc.. donc c'est sûr que c'est cette fonction)



    Voici mon bout de 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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
        //Déclaration du pointeur de structure de type MYSQL
     
        MYSQL mysql;
     
        //Initialisation de MySQL
     
        mysql_init(&mysql);
     
        //Options de connexion
     
        mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");
     
     
     
        //Si la connexion réussie...
     
        if(mysql_real_connect(&mysql,"host","user","pass","bdd",3306,NULL,0))
     
        {
     
            cerr<<"Connected"<<endl;
     
            //Requête qui sélectionne tout dans ma table scores
     
            mysql_query(&mysql, "SELECT * FROM livredor");
     
     
     
            //Déclaration des objets
     
            MYSQL_RES *result = NULL;
     
            MYSQL_ROW row;
     
     
     
            unsigned int i = 0;
     
            unsigned int num_champs = 0;
     
     
     
            cerr<<"err1: "<<mysql_error(&mysql)<< endl;
     
            //On met le jeu de résultat dans le pointeur result
     
            result = mysql_use_result(&mysql);
     
            cerr<<"err2: "<<mysql_error(&mysql)<< endl;
     
     
     
            //On récupère le nombre de champs
     
            num_champs = mysql_num_fields(result);
     
            cerr<<"err3: "<<mysql_error(&mysql)<< endl;
     
     
     
            //Tant qu'il y a encore un résultat ...
     
            while ((row = mysql_fetch_row(result)))
     
            {
     
                //On déclare un pointeur long non signé pour y stocker la taille des valeurs
     
                unsigned long *lengths;
     
     
     
                //On stocke ces tailles dans le pointeur
     
                lengths = mysql_fetch_lengths(result);
     
     
     
                //On fait une boucle pour avoir la valeur de chaque champs
     
                for(i = 0; i < num_champs; i++)
     
                {
     
                   //On ecrit toutes les valeurs
     
                   printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
     
                }
     
                printf("\n");
     
            }
     
     
     
            //Libération du jeu de résultat
     
            mysql_free_result(result);
     
     
     
            //Fermeture de MySQL
     
            mysql_close(&mysql);
     
     
     
        }
     
        else  //Sinon ...
     
        {
     
            printf("Une erreur s'est produite lors de la connexion à la BDD!: %s\n",
     
              mysql_error(&mysql));
     
        }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En lisant la doc j'ai ceci:
    mysql_store_result
    SYNOPSIS:
    MYSQL_RES *mysql_store_result(MYSQL *mysql);

    DESCRIPTION:
    Reads the result to the client. You must use this or mysql_use_result() to get the result from the server. You must always use mysql_store_result() or mysql_use_result() after you have executed a successful query.

    mysql_store_result() returns NULL on error or if the statement didn't return any data. You can check for errors with:

    if (!(result=mysql_store_result(&mysql)) && mysql_num_fields(&mysql))
    fputs(mysql_error(&mysql),stderr);

    A call to mysql_free_result() must be made when you're done to free memory.
    mysql_use_result
    SYNOPSIS:
    MYSQL_RES *mysql_use_result(MYSQL *mysql);

    DESCRIPTION:
    The same as mysql_store_result(), except that the result is fetched dynamically from the server for each 'mysql_fetch_row()'. This should not be used on interactive applications since it ties up the server. This helps to hold down the memory usage on the client side.
    Je pense que tu devrais peut-être utiliser store plutot que use.

    Enfin, pour appeler ces fonctions, il faut d'abord avoir fait une requete...
    Regarde l'exemple (en C, lui), en haut de la doc.
    documentation mysql

    Par ailleurs, ton code est écrit en C++, pas en C
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre averti
    Avatar de marshiell
    Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 338
    Points
    338
    Par défaut
    La fonction mysql_store_result crash de la même façon.
    Et je fais bel et bien une requête, valide, avant.

Discussions similaires

  1. Probléme sur las API MySql - fonction manquante
    Par boopix dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/04/2007, 20h55
  2. Réponses: 3
    Dernier message: 09/05/2006, 17h21
  3. attraper un crash dans une fonction d'une bibliothèque
    Par JeromeCJU dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 10/03/2006, 13h17

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