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

Bases de données Discussion :

QString pour requête


Sujet :

Bases de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Par défaut QString pour requête
    Bonjour,
    Je veux utiliser la base de donnée MySql avec Qt.

    Pour envoyer mais requêtes d'insertion, je vu que c'est simple d'utiliser QString pour la concatenation des chaines de caractères .
    Le problème est quand j'utilise une variable QString
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QString quary = " Hello world !!!"
    qDebug() << quary;
    Résultat afficher :
    " Hello world !!!"
    Donc quand je l'utilise dans une base, les " crée un problème dans la requête.

    Qu'est ce que je dois faire ???

    Merci

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Si je dis pas de bêtises, qDebug() affiche les guillemets autour des chaînes. Mais ceux-ci ne sont pas dans la chaîne.

    De toute façon, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString s = "Hello world!";
    s ne contient pas de guillemets.

    Ensuite, si par hasard ta chaîne pour la requête contient des guillemets (ou apostrophes et autres caractères du même genre) il faut les échapper avec un backslash. Sinon c'est la porte ouverte aux injections SQL, surtout si l'utilisateur à un contrôle dessus.

    Et quand bien même. Toute requête sur laquelle l'utilisateur peut influer par son entrée doit être un prepared statement, et de façon générale, c'est une meilleure façon de faire ses requêtes (gains de perfs possibles en plus de ne pas oublier d'échapper quelque chose).

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Par défaut
    Merci pour la réponse,
    vous pouvez me donner un exemple d'insertion avec QString, car j'ai pas bien compris le truc d'echapement

  4. #4
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Extrait de la doc de QSqlQuery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (:id, :forename, :surname)");
    query.bindValue(":id", 1001);
    query.bindValue(":forename", "Bart");
    query.bindValue(":surname", "Simpson");
    query.exec();
    Il y a d'autres façons de faire, regarde la partie "Approaches to Binding Values"

Discussions similaires

  1. [SQL] Aide pour requête
    Par portu dans le forum Access
    Réponses: 8
    Dernier message: 23/09/2005, 13h05
  2. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  3. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  4. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 11h39
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 20h18

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