mysql C++ code blocks

mysql C++ code blocks - C++ - Programmation

Marsh Posté le 12-04-2013 à 10:03:01    

Bonjour, :)  
Alors voila pour gérer ma base de donnée mysql j'ai fait un programme en C++ avec l'API de mysql.
C'est un programme qui permeterais d'insérer dans une table une variable. Voila mon problème je n'arive pas a renvoyer un char. Si je veu renvoyer des chiffres le programme marche mais des que la variable est constituer de lettre la valeur dans la table est 0  :??:  :
programme (un peu long) :

Code :
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <cstring>
  6. #include <winsock.h>
  7. #include <mysql.h>
  8. #define STRING_SIZE 30
  9. #define INSERT_SAMPLE "INSERT INTO \
  10.            site(nomsite)\
  11.            VALUES(?)"
  12. ///*,Lien,Priorite*/
  13. using namespace std;
  14. int main()
  15. {
  16.     MYSQL mysql;
  17.     int  param_count;
  18.     char str_data [STRING_SIZE];
  19.     unsigned long str_length;
  20.     MYSQL_BIND    bind[1];
  21.     my_ulonglong  affected_rows;
  22.     my_bool       is_null;
  23.     mysql_init(&mysql);
  24.  MYSQL_STMT    *stmt;
  25.     stmt = mysql_stmt_init(&mysql);
  26.     mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option" );
  27. if(mysql_real_connect(&mysql,"localhost","root","admin","bddm",0,NULL,0)){cout<< "all gud"<<endl;}
  28. //
  29.     if (!stmt)
  30.     {
  31.     fprintf(stderr, " mysql_stmt_init(), out of memory\n" );
  32.     exit(0);
  33.     }
  34. if (mysql_stmt_prepare(stmt, INSERT_SAMPLE, strlen(INSERT_SAMPLE)))
  35. {
  36.   fprintf(stderr, " mysql_stmt_prepare(), INSERT failed\n" );
  37.   fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  38.   exit(0);
  39. }
  40. fprintf(stdout, " prepare, INSERT successful\n" );
  41.    // Get the parameter count from the statement
  42. param_count= mysql_stmt_param_count(stmt);
  43. fprintf(stdout, " total parameters in INSERT: %d\n", param_count);
  44. if (param_count != 1) /* validate parameter count */
  45. {
  46.   fprintf(stderr, " invalid parameter count returned by MySQL\n" );
  47.   exit(0);
  48. }
  49. ///* Bind the data for all 4 parameters */
  50. memset(bind, 0, sizeof(bind));
  51. ////
  52. ///* STRING PARAM */
  53. bind[0].buffer_type=MYSQL_TYPE_STRING;
  54. bind[0].buffer= (char *)str_data;
  55. bind[0].buffer_length=STRING_SIZE;
  56. bind[0].is_null= 0;
  57. bind[0].length= &str_length;
  58. ////
  59. ///*Bind the buffers */
  60. if (mysql_stmt_bind_param(stmt, bind))
  61. {
  62.   fprintf(stderr, " mysql_stmt_bind_param() failed\n" );
  63.   fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  64.   exit(0);
  65. }
  66. ///* Specify the data values for the first row */
  67. const char *aze;
  68. aze="azeez";
  69. strncpy(str_data,(char*)aze, STRING_SIZE); /* string  */
  70. str_length= strlen(str_data);
  71. is_null= 0;
  72. ///* Execute the INSERT statement - 1*/
  73. if (mysql_stmt_execute(stmt))
  74. {
  75.   fprintf(stderr, " mysql_stmt_execute(), 1 failed\n" );
  76.   fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  77.   exit(0);
  78. }
  79. ///* Get the total number of affected rows */
  80. affected_rows= mysql_stmt_affected_rows(stmt);
  81. fprintf(stdout, " total affected rows(insert 1): %lu\n",
  82. (unsigned long) affected_rows);
  83. if (affected_rows != 1) /* validate affected rows */
  84. {
  85.   fprintf(stderr, " invalid affected rows by MySQL\n" );
  86.   exit(0);
  87. }
  88. ///* Close the statement */
  89. if (mysql_stmt_close(stmt))
  90. {
  91.   fprintf(stderr, " failed while closing the statement\n" );
  92.   fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  93.   exit(0);
  94. }
  95.     return 0;
  96. }


 
sa fait 2 jour que je cherche et je trouve pas la solution :??: . help me pls  :cry:  
 
merci d'avance

Reply

Marsh Posté le 12-04-2013 à 10:03:01   

Reply

Marsh Posté le 12-04-2013 à 15:23:25    

Allez s'il vous plait, une petite piste ^^

Reply

Marsh Posté le 12-04-2013 à 19:08:03    

Quel est le type de ta colonne ? char(30) ou varchar(30) ?
 
Essaye :  
 
bind[0].length= 0;
 
Sinon, ça a l'air correct


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 13-04-2013 à 15:31:26    

C'est un varchar(30)
Merci de la réponsse je vais essayer sa lundi.

Reply

Marsh Posté le 14-04-2013 à 02:42:51    

Et sinon autre question, lorsuqe je fais la meme manipe pour 4 variable la taille de buffer et trop petite (enfin je croit ^^). Ya t il une solution pour agrandire la taille du buffer?
merci d'avance  :)

Reply

Marsh Posté le 15-04-2013 à 10:43:23    

j'ai esayer en mettant bind[0].lenght=0 meme probleme
et lorsque je met en variable a insérer "12ra" (par exemple) je me retrouve dans la table avec "12" pas d'autre idée ? ^^

Reply

Marsh Posté le 16-04-2013 à 12:24:49    

Oublie le length = 0 je me suis planté, tu es sur que ta colonne est un varchar ?
 
Sinon, je ne vois pas, ton code a l'air correct


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed