Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'affichage console avec l'api MYSQL

Sujet résolu
    15 janvier 2020 à 14:27:12

    Bonjour,

    J'utilise dans un projet l'api mySQL dans mon programme en C pour pouvoir lié ce dernier avec une base de donnée. Après avoir suivit le ci joint : tuto http://www.baghli.com/vc_mysql.php , j'ai un problème d'affichage dans ma console. Voici le code qui permet l'affichage : 

        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");
            }

    Et voici le résultat dans la console :

    La première ligne de ma BDD s'affiche très bien mais le bug commence a la seconde : les infos ne sont pas sur la meme ligne et décalés.

    Avez-vous une idée ?

    Cordialement.

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2020 à 15:19:34

      [%.*s] et on voit qu'il y a une sorte de retour à la ligne avant ']'. => Afficher la chaine row[i] affiche un saut de ligne.
      Par hasard, n'y aurait-il pas un saut de ligne sauvegardé en base de donnée  pour Carpenter , Paul ?
      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2020 à 15:30:33

        Saut neuneutrinos,

        Tu viens de faire une superbe remarque. Je viens de tester en ajoutant manuellement dans la base de donnée des lignes et tout est bon sur la console.

        La personne que j'avais ajouté (Paul) est issu d'un INSERT INTO fait via le programme en C , et des espaces doivent se créer quand j'insert.

        if(mysql_real_connect(&mysql,"localhost","root","","projectc",0,NULL,0))
            {
                //On déclare un tableau de char pour y stocker la requete
                char requete[150];
        
                //On stock la requete dans notre tableau de char
                sprintf(requete, "INSERT INTO student(lastname,firstname,promotion) VALUES('%s','%s','%s')",student->name,student->prenom,student->promotion);
        
        
                //On execute la requete
                mysql_query(&mysql, requete);
        
        
                //Fermeture de MySQL
                // mysql_close(&mysql);
            }

        Je pense du coup que mes chaines de caractères stockées dans ma stucture est bugué et comporte des espaces ?

        Bien à toi.

        Arthur

        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2020 à 15:48:56

          Regarde ce que tu envoies comme requète. (par exemple en affichant la requète en console avant son execution)
          Comme ça tu verras ce que tu envoies.
          Ensuite ton code est sensible aux injection SQL
          Regarde ce qu'il se passe avec comme nom d'étudiant "Bob','B','X')--

          Comment se sécuriser ? il faut préparer la requête.
          https://stackoverflow.com/questions/7629866/how-to-setup-prepared-statements-for-mysql-queries-in-c

          • Partager sur Facebook
          • Partager sur Twitter

          Problème d'affichage console avec l'api MYSQL

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown