int mysql_fetch(MYSQL_STMT *stmt)
        
Descrição
          mysql_fetch() retorna o próximo registro
          no resultado. Ele pode ser chamado apenas enquanto existir o
          conjunto de resultados. Per exemplo, depois de uma chamada de
          mysql_execute() que cria o resultado ou
          depois de mysql_stmt_store_result(), que é
          chamado depois de mysql_execute() para
          armazenar todo o resultado.
        
          mysql_fetch retorna os dados de uma linha
          usando o buffers limitado por
          mysql_bind_result(). Ele retorna os dados
          neste buffer para todas as colunas no registro atual e os
          tamanhos são retornados para o apontador
          length.
        
          Note que, todas as colunas devem ser limitadas pela
          aplicação antes de chamar mysql_fetch().
        
          Se um valor do dado buscado é um valor
          NULL, o valor *is_null
          da estrutura MYSQL_BIND correspondente
          contém VERDADEIRO (1). Senão, o dado e seu tamanho é
          retornado nos elementos *buffer e
          *length baseados no tipo de buffer
          especificado pela aplicação. Cada tipo numérico e temporal
          tem um tamanho fixo como mostrado na tabela a seguir. O tamano
          dos tipos strings dependem do tasmanho do valor dos dados
          atual, como indicado por data_length.
        
| Type | Length | 
| MYSQL_TYPE_TINY | 1 | 
| MYSQL_TYPE_SHORT | 2 | 
| MYSQL_TYPE_LONG | 4 | 
| MYSQL_TYPE_LONGLONG | 8 | 
| MYSQL_TYPE_FLOAT | 4 | 
| MYSQL_TYPE_DOUBLE | 8 | 
| MYSQL_TYPE_TIME | sizeof(MYSQL_TIME) | 
| MYSQL_TYPE_DATE | sizeof(MYSQL_TIME) | 
| MYSQL_TYPE_DATETIME | sizeof(MYSQL_TIME) | 
| MYSQL_TYPE_STRING | tam_dado | 
| MYSQL_TYPE_BLOB | tam_dado | 
Valor Retornado
| Valor retornado | Descrição | 
| 0 | Sucesso, o dado foi buscado para o buffers de dados da aplicação. | 
| 1 | Ocorreu um erro. O código e a mensagem de erro podem ser obtidos
                  chamando mysql_stmt_errno()emysql_stmt_error(). | 
| MYSQL_NO_DATA | Não existem mais registros/dados | 
Erros
              CR_COMMANDS_OUT_OF_SYNC
            
Os comando foram executados em uma ordem inpropriada.
              CR_OUT_OF_MEMORY
            
Falta de memoria.
              CR_SERVER_GONE_ERROR
            
O servidor MySQL foi finalizado.
              CR_SERVER_LOST
            
A conexão ao servidor MySQL foi perdida durante a consulta.
              CR_UNKNOWN_ERROR
            
Um erro desconhecido ocorreu.
              CR_UNSUPPORTED_PARAM_TYPE
            
              O tipo de buffer é MYSQL_TYPE_DATE,
              MYSQL_TYPE_TIME,
              MYSQL_TYPE_DATETIME, ou
              MYSQL_TYPE_TIMESTAMP, mas o tipo de
              dado não é DATE,
              TIME, DATETIME ou
              TIMESTAMP.
            
              Todos os outros erros de conversão não suportada são
              retornados de mysql_bind_result().
            
Exemplo
          O seguinte exemplo demonstra como buscar dados de uma tabela
          usando mysql_get_metadata(),
          mysql_bind_result() e
          mysql_fetch(). (Este exemplo espera
          recuperar as duas linahs inseridas pelo exemplo mostrado em
          Secção 12.1.7.5, “mysql_execute()”.) A variável
          mysql çonsiderada como um handle de
          conexão válido handle.
        
#define STRING_SIZE 50
#define SELECT_SAMPLE "SELECT col1, col2, col3, col4 FROM test_table"
MYSQL_STMT    *stmt;
MYSQL_BIND    bind[4];
MYSQL_RES     *prepare_meta_result;
MYSQL_TIME    ts;
unsigned long length[4];
int           param_count, column_count, row_count;
short         small_data;
int           int_data;
char          str_data[STRING_SIZE];
my_bool       is_null[4];
/*
  Sample which is incorporated directly in the manual under Prepared
  statements section (Example from mysql_fetch()
*/
/* Prepare a SELECT query to fetch data from test_table */
stmt = mysql_prepare(mysql, SELECT_SAMPLE, strlen(SELECT_SAMPLE));
if (!stmt)
{
  fprintf(stderr, " mysql_prepare(), SELECT failed\n");
  fprintf(stderr, " %s\n", mysql_error(mysql));
  exit(0);
}
fprintf(stdout, " prepare, SELECT successful\n");
/* Get the parameter count from the statement */
param_count= mysql_param_count(stmt);
fprintf(stdout, " total parameters in SELECT: %d\n", param_count);
if (param_count != 0) /* validate parameter count */
{
  fprintf(stderr, " invalid parameter count returned by MySQL\n");
  exit(0);
}
/* Fetch result set meta information */
prepare_meta_result = mysql_get_metadata(stmt);
if (!prepare_meta_result)
{
  fprintf(stderr, " mysql_get_metadata(), returned no meta information\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Get total columns in the query */
column_count= mysql_num_fields(prepare_meta_result);
fprintf(stdout, " total columns in SELECT statement: %d\n", column_count);
if (column_count != 4) /* validate column count */
{
  fprintf(stderr, " invalid column count returned by MySQL\n");
  exit(0);
}
/* Execute the SELECT query */
if (mysql_execute(stmt))
{
  fprintf(stderr, " mysql_execute(), failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Bind the result buffers for all 3 columns before fetching them */
/* INTEGER COLUMN */
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&int_data;
bind[0].is_null= &is_null[0];
bind[0].length= &length[0];
/* STRING COLUMN */
bind[1].buffer_type= MYSQL_TYPE_STRING;
bind[1].buffer= (char *)str_data;
bind[1].buffer_length= STRING_SIZE;
bind[1].is_null= &is_null[1];
bind[1].length= &length[1];
/* SMALLINT COLUMN */
bind[2].buffer_type= MYSQL_TYPE_SHORT;
bind[2].buffer= (char *)&small_data;
bind[2].is_null= &is_null[2];
bind[2].length= &length[2];
/* TIMESTAMP COLUMN */
bind[3].buffer_type= MYSQL_TYPE_TIMESTAMP;
bind[3].buffer= (char *)&ts;
bind[3].is_null= &is_null[3];
bind[3].length= &length[3];
/* Bind the result buffers */
if (mysql_bind_result(stmt, bind))
{
  fprintf(stderr, " mysql_bind_result() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Now buffer all results to client */
if (mysql_stmt_store_result(stmt))
{
  fprintf(stderr, " mysql_stmt_store_result() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Fetch all rows */
row_count= 0;
fprintf(stdout, "Fetching results ...\n");
while (!mysql_fetch(stmt))
{
  row_count++;
  fprintf(stdout, "  row %d\n", row_count);
  /* column 1 */
  fprintf(stdout, "   column1 (integer)  : ");
  if (is_null[0])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %d(%ld)\n", int_data, length[0]);
  /* column 2 */
  fprintf(stdout, "   column2 (string)   : ");
  if (is_null[1])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %s(%ld)\n", str_data, length[1]);
  /* column 3 */
  fprintf(stdout, "   column3 (smallint) : ");
  if (is_null[2])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %d(%ld)\n", small_data, length[2]);
  /* column 4 */
  fprintf(stdout, "   column4 (timestamp): ");
  if (is_null[3])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %04d-%02d-%02d %02d:%02d:%02d (%ld)\n",
                                               ts.year, ts.month, ts.day,
                                               ts.hour, ts.minute, ts.second,
                                               length[3]);
  fprintf(stdout, "\n");
}
/* Validate rows fetched */
fprintf(stdout, " total rows fetched: %d\n", row_count);
if (row_count != 2)
{
  fprintf(stderr, " MySQL failed to return all rows\n");
  exit(0);
}
/* Free the prepared result metadata */
mysql_free_result(prepare_meta_result);
/* Close the statement */
if (mysql_stmt_close(stmt))
{
  fprintf(stderr, " failed while closing the statement\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

