MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
20.4.18.1  Description
Retrieves the next row of a result set. When used after
mysql_store_result(), mysql_fetch_row() returns NULL
when there are no more rows to retrieve.  When used after
mysql_use_result(), mysql_fetch_row() returns NULL when
there are no more rows to retrieve or if an error occurred.
The number of values in the row is given by mysql_num_fields(result).
If row holds the return value from a call to mysql_fetch_row(),
pointers to the values are accessed as row[0] to
row[mysql_num_fields(result)-1].  NULL values in the row are
indicated by NULL pointers.
The lengths of the field values in the row may be obtained by calling
mysql_fetch_lengths().  Empty fields and fields containing
NULL both have length 0; you can distinguish these by checking
the pointer for the field value.  If the pointer is NULL, the field
is NULL; otherwise the field is empty.
20.4.18.2  Return values
A MYSQL_ROW structure for the next row.  NULL if
there are no more rows to retrieve or if an error occurred.
20.4.18.3  Errors
CR_SERVER_LOST
- 
The connection to the server was lost during the query.
 CR_UNKNOWN_ERROR
- 
An unknown error occurred.
 
20.4.18.4  Example
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
   unsigned long *lengths;
   lengths = mysql_fetch_lengths(result);
   for(i = 0; i < num_fields; i++)
   {
       printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
   }
   printf("\n");
}