C++ / Linux Raspberry / MySQL requete
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

C++ / Linux Raspberry / MySQL requete



  1. #1
    HAYAC

    C++ / Linux Raspberry / MySQL requete


    ------

    Bonsoir à tous,
    Je reviens vers vous car je bloque sur les char, const char, static char* et leur concaténation.
    j'ai pour test cette chaine 'query_quest' en static char
    J'aimerais remplacer la valeur de recherche "= 'serial'" par une variable passé par mes process.
    Après recherche sur mon moteur de recherche je ne trouve que des solutions lourdes et complexe.
    Auriez vous une idée sur la question ?
    Cordialement,

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    HAYAC

    Re : C++ / Linux Raspberry / MySQL requete

    j'ai fais comme cela (voir pj) mais je ne trouve pas cela très propre
    Fichiers attachés Fichiers attachés

  3. #3
    JPL
    Responsable des forums

    Re : C++ / Linux Raspberry / MySQL requete

    Mets plutôt le code dans le message entre les balises [Code]...[/Code].
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #4
    HAYAC

    Re : C++ / Linux Raspberry / MySQL requete

    le forum ne veux pas, il prends cela pour des attaque, d’où le détour
    peut être dans réponse rapide qui semble moins sensible (a voir)
    non il n'y à pas les balises code
    Dernière modification par HAYAC ; 06/08/2022 à 23h28.

  5. A voir en vidéo sur Futura
  6. #5
    JPL
    Responsable des forums

    Re : C++ / Linux Raspberry / MySQL requete

    Ah, encore cette connerie de sécurité à la noix. C’est nouveau depuis que la gestion de sa sécurité est passée à un autre prestataire. Je m’en suis plaint à qui de doit, mais cela semble irréversible.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  7. #6
    micapivi

    Re : C++ / Linux Raspberry / MySQL requete

    Bonjour

    Il faudrait peut-être remplacer les caractères :
    U+0060 <=> GRAVE ACCENT

    par des caractères
    U+0027 <=> APOSTROPHE

    Ce qui donnerait :
    Code:
    std::string query_q1 = "SELECT * FROM 'sensors' WHERE ('serial' = '";
    const char query_q2 = query_value;
    std::string query_q3 = "')";
    std::string query_qend = query_q1 + query_q2 + query_q3;    // String query quest
    char* query_quest = new char[query_qend.length() + 1];      // convertion String query to Const char
    strcpy(query_quest, query_qend.c_str());                    //
    if ((mysql_query(mariasql::my, query_quest)) == NULL)
    Et c'est peut-être aussi pour ça que cet extrait de code C⁺⁺ ne fonctionne pas pour formuler une requête SQL
    Dernière modification par micapivi ; 07/08/2022 à 05h38.

  8. #7
    pm42

    Re : C++ / Linux Raspberry / MySQL requete

    Code:
    std::string query = "SELECT * FROM 'sensors' WHERE ('serial' = '?')";
    std::string replace=std::string(1, query_value); // Convert char query_value to string
    query.replace(base.find("?"),1, replace); // 1 is length of "?"
    Si query_value est une string ou un char*, c'est encore plus simple puisque la 2ème ligne est inutile.
    Si on veut remplacer plusieurs paramètres, on met des "?1", "?2" et on adapte le find/replace.

    On peut faire plus simple encore avec certaines librairies ou en C++ 20 mais le code ci-dessus devrait marcher pratiquement partout.
    Cette approche qui consiste à mettre des ? à la place des arguments dans une chaine SQL puis à remplir par leurs valeurs est un classique utilisé par des librairies de référence dans d'autres langages.

  9. #8
    micapivi

    Re : C++ / Linux Raspberry / MySQL requete

    …le code ci-dessus devrait marcher pratiquement partout. …
    Oui, l'extrait de code que j'ai transmis dans mon précédent message est la version que j'ai modifiée
    du code qui est contenu dans le fichier code.txt (dont le lien a été donné par HAYAC dans son premier message de ce fil de discussion)

  10. #9
    HAYAC

    Re : C++ / Linux Raspberry / MySQL requete

    Citation Envoyé par pm42 Voir le message
    Code:
    std::string query = "SELECT * FROM 'sensors' WHERE ('serial' = '?')";
    std::string replace=std::string(1, query_value); // Convert char query_value to string
    query.replace(base.find("?"),1, replace); // 1 is length of "?"
    Si query_value est une string ou un char*, c'est encore plus simple puisque la 2ème ligne est inutile.
    Si on veut remplacer plusieurs paramètres, on met des "?1", "?2" et on adapte le find/replace.

    On peut faire plus simple encore avec certaines librairies ou en C++ 20 mais le code ci-dessus devrait marcher pratiquement partout.
    Cette approche qui consiste à mettre des ? à la place des arguments dans une chaine SQL puis à remplir par leurs valeurs est un classique utilisé par des librairies de référence dans d'autres langages.
    Effectivement il vous manque des infos :
    query_value est en char, ce qui, dans l'absolut, n'est pas un problème (simple a modifier).
    je ne comprend pas base.find, a quoi cela fait référence ?
    Enfin, mysql_query attend un const char non std::srting.
    Mais j'aime l'idée c'est bien plus propre et facile à lire par la suite

    pour ce qui est du C++ 20, je suis dépendant de l’environnement Raspberry, l'idée étant de procédurer le déploiement, sans en faire une usine à gaz
    Cordialement
    Dernière modification par HAYAC ; 07/08/2022 à 16h06.

  11. #10
    pm42

    Re : C++ / Linux Raspberry / MySQL requete

    Citation Envoyé par HAYAC Voir le message
    je ne comprend pas base.find, a quoi cela fait référence ?
    C'est une erreur de recopie. C'est query.find.

    Citation Envoyé par HAYAC Voir le message
    Enfin, mysql_query attend un const char non std::srting.
    Tu convertis la string en const char* facilement.

    L'idée c'est de ne manipuler que des string qui sont largement plus faciles et puissantes et de passer en char* uniquement quand c'est nécessaire parce que c'est une technologie qui est l'équivalent de la machine à vapeur en étant gentil.

  12. #11
    HAYAC

    Re : C++ / Linux Raspberry / MySQL requete

    Pour mon cas, s'il n'y à pas d'erreur
    Code:
    std::string query_quest_string = "SELECT * FROM 'sensors' WHERE ('serial' = '?')";
    std::string replace = std::string(1, query_value);          // Convert char query_value to string
    query_quest_string.replace(query_quest_string.find("?"), 1, replace);            // 1 is length of "?"
    
    char* query_quest = new char[query_quest_string.length() + 1];      // convertion String query to Const char
    strcpy(query_quest, query_quest_string.c_str());                    //
    
    if ((mysql_query(mariasql::my, query_quest)) == NULL)
    Si j'ai bien compris la doc

Discussions similaires

  1. Raspberry Pi avec Mysql : Accès distant [Résolu]
    Par pouic92 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 8
    Dernier message: 18/01/2018, 15h45
  2. Requête MySQL
    Par invite948b37db dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 04/03/2015, 13h04
  3. Réponses: 29
    Dernier message: 29/10/2014, 08h39
  4. Mysql probleme requete sql
    Par johny005 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 15/12/2011, 19h56