Bonjour � tous, je commence un peu � devenir fou en ce moment pr�cis!
Je bataille sur un probl�me qui � l'air si simple ...
Je dois tout simplement r�cup�rer des valeurs dans ma BDD, le probl�me �tant que le nombre de r�sultats est bien retourn�, mais que je n'ai que des valeurs nulles..
Je m'excuse d'avance pour le code qui est assez long, je le commente et le raccourcis au maximum
ceci est ce qui me sert � pr�parer les requ�tes
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 RetainPtr< Statement > MySQLDatabase::prepare(const std::string & sql) { // sql = SELECT title FROM test WHERE WHERE title LIKE '%d' // doit me retourner les valeurs Second ou Third MYSQL_STMT * stmt; _current_query_is_a_select = false; stmt = mysql_stmt_init(&_handle); if (!stmt) { fprintf(stderr, " mysql_stmt_init(), out of memory\n"); exit(0); } if (sql.find("SELECT") != -1) { _current_query_is_a_select = true; } if (mysql_stmt_prepare(stmt, sql.c_str(), sql.size()) != 0) { //error aranatha_log("query: %s", sql.c_str()); handle_error(mysql_stmt_prepare(stmt, sql.c_str(), sql.size())); } debug_log(debug_database, "query %lx: %s", (size_t)statement.get(), sql.c_str()); }
suit ce qui me sert a ex�cuter ma requ�te et a traiter mes r�sultats.
Ne faites pas attention aux variables statement qui changent, je ne suis pas dans la m�me classe.
et le dernier bout sert � r�cup�rer les donn�es retourn�es :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 MYSQL_ROW row; MYSQL_FIELD *field_mysql; MYSQL_RES *result; std::string data; debug_log(debug_database, "execute %lx", (size_t)this); _ResultArchive result_archive(*this); int numres; int nbcolonnes = 0; bool is_a_select = static_cast < MySQLDatabase * > (database().get())->current_query_is_a_select(); if (!_stmt) { fprintf(stderr, " mysql_stmt_init(), out of memory\n"); exit(0); } if(mysql_stmt_execute(_stmt) != 0) { //error fprintf(stderr, " mysql_stmt_execute(), 1 failed\n"); fprintf(stderr, " %s\n", mysql_stmt_error(_stmt),"\n"); exit(0); } bool first_occur = true; mysql_stmt_store_result(_stmt); while(!mysql_stmt_fetch(_stmt))// fonctionne, j'ai autant d'occurences de boucle que de résultats attendus { if (first_occur == true) { MYSQL_RES *n = mysql_stmt_result_metadata(_stmt); while(field_mysql = mysql_fetch_field(n)) // Nom de colonnes { numres = mysql_num_rows(n); boost::optional < Field > field_name; field_name = field_for_name(field_mysql->name); if (field_name != NULL) { // initialised _tab_asso_nomcolonnes[*field_name] = nbcolonnes; // *field_name is no longer a boost::optionnal <Field> but a Field nbcolonnes++; } } first_occur = false; } collector.collect(result_archive);// collecte les resultats };
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8 void collect(Archive & archive) { std::string name; archive.sync(name, field_title, group_title, 0);// doit retourner second ou third, mais retourne toujours un NULL assert(name == "second" || name == "third"); ++result_count; }voila, je suis d�sol� pour le paquet, mais je suis vraiment perdu la ><
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 void sync(std::string & value, Field field, Group group, ArchiveFlags flags) { if (value.capacity() < 0) value.resize(63); else value.resize(value.capacity()); MYSQL_BIND bind; my_bool is_null = 0; unsigned long length = 0; my_bool error = 0; std::string string_left; int position_last_char; int size_last_char; char* str = new char[value.size()+1]; strcpy(str, value.c_str()); // utilisation de str delete[] str; /* STRING COLUMN */ bind.buffer_type= MYSQL_TYPE_STRING; bind.buffer= str; bind.buffer_length= value.size(); bind.is_null= &is_null; bind.length= &length; bind.error= &error; position_last_char = value.size(); size_t sd; int success; sd = _statement._tab_asso_nomcolonnes[field]; success = mysql_stmt_fetch_column(_statement.stmt(),&bind,_statement._tab_asso_nomcolonnes[field],0); }
Je vous remercie pour toutes les pistes que vous pouvez me donner
Partager