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

Langage C++ Discussion :

Problème SQL Insert Into


Sujet :

Langage C++

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut Problème SQL Insert Into
    Bonjour,
    J'invoque votre aide car je suis bloqué sur quelque chose de probablement très simple, mais sur le quel je sèche complètement.

    Pour faire simple j'ai des clients qui envoient la valeur de leurs capteurs a un serveur.
    Celui ci fait du parssing puis les integre a ca base de données (mysql).
    Seul la variable capteur est un string, toutes le autres sont des int.
    La premiere ligne ne fonctionne pas, mais celle en commentaire si.
    Avez vous une idée de l'origine potentiel du problème ?

    mysql_query(connect, "INSERT INTO Test1 VALUES(capteur,Id_patient',valeurs,date,heure,minute,seconde,micro);");
    //mysql_query(connect, "INSERT INTO Test1 VALUES('af',268.000000,20150531,17,23, 12, 23,4976424485);");

    Je convertis mes string en int de cette manière.
    std::istringstream instrx(bufferx);
    instrx >> minute;

    Merci d'avance de votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Les chaînes de caractères ne contiennent pas de variable mais des caractères. Il faut convertir les variables en chaîne et concaténer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::string query = "INSERT INTO Test1 VALUES('";
    query += capteur; // il faudrait utiliser mysql_real_escape_string_quote
    query += "', ";
    query += std::to_string(valeurs);
    //etc
    mysql_query(connect, query.cstr());
    Ou avec std::istringstream si C++11 n'est pas supporté.

    Note: il existe des types pour les dates avec mysql.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    Si je comprends bien c'est mysql qui convertit les valeurs envoyé dans le type correspondant.

    Du coup ça va simplifier mon code car les valeurs sont les résultantes du parsing d'un string.
    Je devrais donc directement pouvoir les concaténer pour les envoyer.

    Merci, je teste ça dans la soirée.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    Arf j'ai un nouveau petit problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string query;
    query += "INSERT INTO Test1 VALUES('";
    query += capteur;
    query +=  "','";
    query += Id_patient;
    query +=  "','";
    query += valeurs;
    query +=  "');";
    Je concatene, demande d'afficher cout << query.cstr(); ou de l'envoyer a la bd mysql_query(connect, query.cstr());
    Mais je me retrouve toujours avec ce message d'erreur:
    test.cpp:118:15: error: ‘std::string’ has no member named ‘cstr’


    Pourtant j'ai bien inclus les librairie
    #include <string>
    #include <cstring>

    Pour parser ma chêne j'utilise la fonction string.append();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      if(i<=1){
            capteur.append(Smessage,i,1);
            i++;
            }
     
            if(i>1 && i<=11){
            valeurs.append(Smessage,i,1);
            i++;}
     
            if(i>11 && i<=19){
            date.append(Smessage,i,1);
            i++;
            }

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    Ca marche ! Merci !
    J'ai remplacé cstr() par c_str()

    Voila le code si jamais ca peut aider d'autre personnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    string query;
    query += "INSERT INTO Test1 VALUES('";
    query += capteur;
    query +=  "','";
    query += Id_patient;
    query +=  "','";
    query += valeurs;
    query +=  "','";
    [...]
    query +=  "');";
     
    mysql_query(connect, query.c_str());

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Attention aux injections SQL.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Et c'est signé Bousk'); DROP TABLE users; -- .

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Je plussoie à ce qu’a dit Bousk.

    C’est pas terrible de proposer une réponse à base de création de la requête par concaténation de chaîne :
    - soit (la bonne solution) on passe par des statement préparés
    - soit (au pire) on passe par mysql_real_escape_string()

    Autant ne jamais prendre de mauvaises habitudes, après c’est plus difficile de s’en défaire.

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 8
    Par défaut
    Comment quelqu'un pourrait faire une injection dessus ?
    Le parsseur traite un nombre de caractères définie, il serait donc compliquée d'ajouter des instructions, non ?
    Quels sont ces statements ?

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 464
    Par défaut
    Comment quelqu'un pourrait faire une injection dessus ?
    Vous concaténez des chaines de caractères dans des variables pour construire une requête SQL.
    Les variables sont susceptibles d'avoir des valeurs rentrées par l'utilisateur.
    L'utilisateur est malicieux.
    La requêtes peut donc devenir tous et surtout n'importe quoi.
    Le parsseur traite un nombre de caractères définie,
    What ?
    Il fait ce qu'on lui demande, encore heureux, même si la demande vient d'un utilisateur malicieux.
    il serait donc compliquée d'ajouter des instructions, non ?
    Compliquer comme quoi ? A peine plus que de construire une pyramide avec des cubes pour bébés.
    Quels sont ces statements ?
    http://docs.oracle.com/javase/tutori.../prepared.html

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

Discussions similaires

  1. Problème de requête sql INSERT INTO
    Par momoh dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/02/2009, 16h58
  2. Problème requête sql : INSERT INTO
    Par bobosh dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/08/2008, 10h43
  3. Multiplier les And dans Sql Insert Into
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/09/2005, 21h55
  4. Réponses: 3
    Dernier message: 10/05/2005, 11h02
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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