Public feed
#890452
// 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);
}