void CMySQLConnection::do_query(DBTable& db_table, const char* sql, int sql_length) throw (CDBException) { MYSQL* mysql_handler = static_cast<MYSQL*>(_mysql_handler); // 如果查询成功,返回0。如果出现错误,返回非0值 if (mysql_real_query(mysql_handler, sql, (unsigned long)sql_length) != 0) { throw CDBException(NULL, utils::StringFormatter("sql[%s] error: %s", sql, mysql_error(mysql_handler)).c_str(), mysql_errno(mysql_handler), __FILE__, __LINE__); } // 取结果集 MYSQL_RES* result_set = mysql_store_result(mysql_handler); if (NULL == result_set) { throw CDBException(sql, utils::StringFormatter("sql[%s] error: %s", sql, mysql_error(mysql_handler)).c_str(), mysql_errno(mysql_handler), __FILE__, __LINE__); } else { // 取得字段个数 int num_fields = mysql_num_fields(result_set); while (true) { MYSQL_ROW row = mysql_fetch_row(result_set); if (NULL == row) { break; } DBRow db_row; for (int i = 0; i < num_fields; ++i) { const char* field_value = row[i]; if (NULL == field_value) db_row.push_back(_null_value); else db_row.push_back(field_value); } db_table.push_back(db_row); } mysql_free_result(result_set); } }