int executeQuery(MYSQL* mysql, const std::string& query) { std::clog << mysql->host << ", query: " << query << std::endl; int retval; query: retval = mysql_real_query(mysql, query.c_str(), query.length()); switch (mysql_errno(mysql)) { case CR_COMMANDS_OUT_OF_SYNC: { std::cerr << "host: " << mysql->host << ", CR_COMMANDS_OUT_OF_SYNC !!!" << std::endl; assert(false && "you call mysql_real_query, mysql_{store,use,free,next}_result in a bad order. Fix it !"); MYSQL_RES* result = mysql_use_result(mysql); mysql_free_result(result); goto query; } case 0: break; default: std:cerr << "retval: " << retval << ", errno: " << mysql_errno(mysql) << ", " << mysql_error(mysql) << std::endl << "host: " << mysql->host << ", query: " << query << std::endl; } return retval; } int main() { MYSQL* mysql= mysql_init(0); assert(mysql); mysql_options(database, MYSQL_READ_DEFAULT_GROUP, "option"); if (!mysql_real_connect(database, "localhost", "root" , "password", "database", 0, 0, 0)) { std::cerr << "Connection error!" << std::endl; return 1; } int retval = executeQuery(mysql, "SELECT field1 FROM table1 WHERE id=1"); if (retval) { std::cerr << "Query failed " << mysql_error(mysql) << std::endl; return 2; } MYSQL_RES* result = mysql_store_result(mysql); if (!result) { std::cerr << "Query can't be retrieved " << mysql_error(mysql) << std::endl; return 3; } MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { int variable = atoi(row[0]); std::cout << variable << std::endl; } mysql_free_result(result); mysql_close(database); return 0; }
Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
#include <iostream> #include <cassert> #include <mysql/mysql.h> #include <mysql/errmsg.h> #include <cstdlib> int executeQuery(MYSQL* mysql, const std::string& query) { std::clog << mysql->host << ", query: " << query << std::endl; int retval; query: retval = mysql_real_query(mysql, query.c_str(), query.length()); switch (mysql_errno(mysql)) { case CR_COMMANDS_OUT_OF_SYNC: { std::cerr << "host: " << mysql->host << ", CR_COMMANDS_OUT_OF_SYNC !!!" << std::endl; assert(false && "you call mysql_real_query, mysql_{store,use,free,next}_result in a bad order. Fix it !"); MYSQL_RES* result = mysql_use_result(mysql); mysql_free_result(result); goto query; } case 0: break; default: std::cerr << "retval: " << retval << ", errno: " << mysql_errno(mysql) << ", " << mysql_error(mysql) << std::endl << "host: " << mysql->host << ", query: " << query << std::endl; } return retval; } int launchQuery(MYSQL* mysql, const std::string& query) { int retval = executeQuery(mysql, query); if (retval) { std::cerr << "Query failed " << mysql_error(mysql) << std::endl; return 2; } MYSQL_RES* result = mysql_store_result(mysql); if (!result) { std::cerr << "Query can't be retrieved " << mysql_error(mysql) << std::endl; return 3; } MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { int variable = atoi(row[0]); std::cout << variable << std::endl; } mysql_free_result(result); return 0; } int main() { MYSQL* mysql= mysql_init(0); assert(mysql); mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "option"); if (!mysql_real_connect(mysql, "localhost", "user" , "pass", "db", 0, 0, 0)) { std::cerr << "Connection error!" << std::endl; return 1; } launchQuery(mysql, "SELECT ID FROM TABLE1 limit 10;"); launchQuery(mysql, "SELECT ID FROM TABLE2 limit 10;"); mysql_close(mysql); return 0; }
Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature