Partage
  • Partager sur Facebook
  • Partager sur Twitter

Base de donnée SQLite

Problème de recherche

Sujet résolu
    2 décembre 2021 à 17:01:59

    Bonjour à tous, j'ai affaire à un problème tout bête que je n'arrive pas à résoudre.
    En C++, sur Qt j'initialise ma DB via :
    QSqlQuery test("CREATE TABLE test (ID integer PRIMARY KEY AUTOINCREMENT, userID VARCHAR(64), Amount VARCHAR(16), message VARCHAR(40));",m_db);
    test.exec();

    puis je décide d'insérer des éléments :

    QSqlQuery tx(m_db);
    tx.prepare("INSERT INTO test (userID, Amount, message) VALUES (?,?,?);");

    QString userId { "0192aabb" };
    QString amount { "00000000" };
    QString message { "18a40017a818" };

    tx.addBindValue(QByteArray::fromHex(userId.toUtf8()));
    tx.addBindValue(QByteArray::fromHex(amount.toUtf8()));
    tx.addBindValue(QByteArray::fromHex(message.toUtf8()));
    tx.exec();

    Enfin, je décide de faire une recherche :
    QSqlQuery getUser("SELECT message FROM test WHERE `userID` = \""+QByteArray::fromHex(userId.toUtf8())+"\";",m_db);
    getUser.exec();

    Mais il me retourne absolument rien alors que le userId est le même et qu'il est dans la db en caractères ANSI. Du coup je fais ma requête en caractères ansi : QByteArray::fromHex(userId.toUtf8()).

    Auriez vous une idée ? Bien cordialement.

    -
    Edité par Loopite 2 décembre 2021 à 17:04:28

    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2021 à 19:17:07

      pourquoi ne pas passer par une requête préparée, comme pour l'insertion ? Je suspecte sinon que ce sont les guillemets entourant la valeur qui ne sont pas bon, tu insères des guillemets doubles (") alors qu'en principe (sauf erreur de ma part) il faut utiliser des simples (') (avec une requête préparée pas besoin de se poser la question)
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2021 à 9:40:32

        Ton code contient une injection SQL. Utilise les requêtes préparées comme ce que tu as déjà fait.

        -
        Edité par markand 3 décembre 2021 à 9:40:53

        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          3 décembre 2021 à 16:07:34

          Bonjour ;) tout fonctionne. En effet, une requête prepare est plus utile dans mon cas !
          Je vous re-merci beaucoup pour vos conseils !

          Cordialement.
          • Partager sur Facebook
          • Partager sur Twitter

          Base de donnée SQLite

          × 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