mysql.h


Función mysql_num_fields()

unsigned int mysql_num_fields(MYSQL_RES *result);

O

unsigned int mysql_num_fields(MYSQL *mysql);

El segundo formato no funciona en la versión 3.22.24 de MySQL y siguientes. Para pasar un argumento MYSQL*, se debe usar en su lugar la función mysql_field_count.

Devuelve el número de columnas en un conjunto de resultados.

También se puede obtener el número de columnas desde un puntero al conjunto de resultados o a un manipulador de conexión. Se puede usar el manipulador de conexión si mysql_store_result o mysql_use_result devuelve NULL (y por ese motivo no se dispone de un puntero al conjunto de resultados). En ese caso, se puede llamar a mysql_field_count para determinar si mysql_store_result ha producido un resultado no vacío. Esto permite al programa cliente tomar la acción apropiada sin saber si la consulta ha sido una sentencia SELECT (o del tipo SELECT). El ejemplo incluido cómo se puede realizar esto.

Valores de retorno

Un entero sin signo que representa el número de campos en un conjunto de resultados.

Errores

Ninguno.

Ejemplo

MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;

if (mysql_query(&mysql,query_string)) {
   // error
}
else { // consulta exitosa, procesar cualquier dato devuelto por ella
    result = mysql_store_result(&mysql);
    if (result) {  // no hay filas
       num_fields = mysql_num_fields(result);
       // recuperar filas, y después llamar a mysql_free_result(result)
    }
    else { // mysql_store_result() no devolvió nada; ¿debería?
       if (mysql_errno(&mysql)) {
          fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
       }
       else if (mysql_field_count(&mysql) == 0) {
          // la consulta no ha devuelto datos
          // (no era un SELECT)
          num_rows = mysql_affected_rows(&mysql);
       }
    }
}

Una alternativa (si se sabe que la consulta debe devolver un conjunto de resultados) es remplazar la llamada mysql_errno(&mysql) por una comprobación de si mysql_field_count(&mysql) es igual a 0. Esto sólo ocurrirá si algo ha salido mal.