// The following are my MySQL wrapper functions to retrieve a null terminated string // from a MySQL result set, given a row and index (i.e. a field) // Usage i.e.: char* buf = db_gets(result, row, 0); free(buf); // Usage i.e.: char** result_arr; db_gets_all(result, row, &result_arr, 3); db_gets_all_free(&result_arr, 4); // Please advise: is this the most efficiency way to do this? I fear the strdup() is not efficient // get null-terminated string from mysql result set at specified index char* db_gets(MYSQL_RES* result, MYSQL_ROW row, int index) { unsigned long* lengths = mysql_fetch_lengths(result); char p[lengths[index]+1]; // +1 for '\0' int i; for(i = 0;i < lengths[index];i++) { p[i] = row[index][i]; } p[lengths[index]] = '\0'; return strdup(p); } void db_gets_all(MYSQL_RES* result, MYSQL_ROW row, char*** result_arr, size_t nrows) { int i; char** arr_local; if( (arr_local = calloc(nrows, sizeof *arr_local)) != NULL ) { for(i = 0;i < nrows;i++) { arr_local[i] = db_gets(result, row, i); } } *result_arr = arr_local; } void db_gets_all_free(char*** result_arr, size_t nrows) { int i; for(i = 0;i < nrows;i++) free((*result_arr)[i]); free(*result_arr); }