MySQL 5.7 C API Developer Guide
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
          mysql_fetch_row() retrieves
          the next row of a result set:
        
              When used after
              mysql_store_result(),
              mysql_fetch_row() returns
              NULL if there are no more rows to
              retrieve.
            
              When used after
              mysql_use_result(),
              mysql_fetch_row() returns
              NULL if there are no more rows to
              retrieve or 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.
        
          A MYSQL_ROW structure for the next row, or
          NULL. The meaning of a
          NULL return depends on which function was
          called preceding
          mysql_fetch_row():
        
              When used after
              mysql_store_result(),
              mysql_fetch_row() returns
              NULL if there are no more rows to
              retrieve.
            
              When used after
              mysql_use_result(),
              mysql_fetch_row() returns
              NULL if there are no more rows to
              retrieve or an error occurred. To determine whether an
              error occurred, check whether
              mysql_error() returns a
              nonempty string or
              mysql_errno() returns
              nonzero.
            
          Errors are not reset between calls to
          mysql_fetch_row()
        
The connection to the server was lost during the query.
An unknown error occurred.
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");
}