Passage de requete mysql !

Résolu
chaya56 Messages postés 4 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 19 août 2010 - 18 juin 2007 à 15:47
chaya56 Messages postés 4 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 19 août 2010 - 20 juin 2007 à 08:43
Bonjour,
je tiens a prevenir que cela fait 2 ans que je n'ai plus fait de C++ et a l'epoque j'avais un niveau débutant !
Donc ma question :
pour un projet personnel j'essaye de faire un mini client mysql en C++ ds lequel on saisira des requetes a executer sur une bdd préalablement définie, hors j'ai beaucoup de mal a faire passer un CHAR saisie a la mano grace a un CIN ds la fonction : (mysql_query(sock,rrequete)).

si je fait un char * rrequete = "select * from user;" la requete passe correctement.
par contre si je fait un cin >> rrequete ; => le programme compile mais plante a la saisie de la requete.

Actuellement j'ai ecrit ce code afin de saisir la requete et l'envoyer mais j'obtient a chaque fois le message d'erreur ci dessous :

string requete ;                   //Creation d'un string afin de permettre une saisie plus facile
cout << "requete ? " ;
cin >> requete ;
size_t requetesize = requete.size() + 1;   //on regarde la taille de la chaine
char * rrequete = new char[ requetesize ];  //on crée un char a la taille+1 pour caract de fin de chaine
strncpy( rrequete, requete.c_str(), requetesize );   // on copie la string ds le char                           
delete &amp;requete;           // on libere de la mémoire         
cout << requete ;          // on controle ce que l'on a rentré....

//execution de la requete
if (mysql_query(sock,rrequete)) cout <<"echec de la requete, motif : \n" << mysql_error(sock) << "\n";
    else 
    {
    cout << "requete faite !";
    }  


message renvoyé par le programme :

Le serveur est en ligne
Initialisation de la connexion Ok !
connection ok, sur la bdd : test
requete ? select * from user
echec de la requete, motif :
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near '' at line 1
Press any key to continue . . .

la requete MYSQL ne prendrait elle pas par hasard unqiuement la premiere case de ma chaine de caractere? rrequete[0] ?

2 réponses

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
19 juin 2007 à 14:23
Salut,
Tel quel le cin ne prend que le premier mot (avant le premier espace).
Tu peux vérifier avec un
  cin >> requete ;
  cout << "requete:"+requete ;

Donc remplacer
  cin >> requete ;
par
  getline (cin, requete);

Accessoirement je conseille de lire attentivement cette page
http://www.cplusplus.com/doc/tutorial/basic_io.html

Note: pas besoin de dupliquer le string requete pour le passer à mysql_query().
3
chaya56 Messages postés 4 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 19 août 2010
20 juin 2007 à 08:43
merci pour votre réponse :

code corrigé :

cout << "requete ? " ;
getline( cin, requete );                                  // on saisit la requete avec les espaces              
cout << requete.c_str() ;  
if (mysql_query(sock,requete.c_str())) cout <<"echec de la requete, motif : \n" << mysql_error(sock) << "\n";
    else
    {
    cout << "requete faite !" << endl;

etc...
0
Rejoignez-nous