mysql.h


Función mysql_field_count()

unsigned int mysql_field_count(MYSQL *mysql)

Si se está usando una versión de MySQL previa a la 3.22.24, se debe usar en su lugar unsigned int mysql_num_fields(MYSQL *mysql).

Devuelve el número de columnas para la consulta más reciente de la conexión mysql.

El uso habitual de esta función es cuando mysql_store_result() devuelve NULL (y entonces 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() debería haber producido un resultado no vacío. Esto permite al programa cliente tomar las acciones adecuadas sin saber si la consulta fue una sentencia SELECT (o parecida). El ejemplo mostrado aquí ilustra como puede hacerse esto.

Ver mysql_store_result() para ver por qué a veces esta función devuelve NULL después de que mysql_query() retorne con éxito.

Valores de retorno

Un entero sin signo que representa el número de columnas en el 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 retornado
{
    result = mysql_store_result(&mysql);
    if (result)  // there are rows
    {
        num_fields = mysql_num_fields(result);
        // recuperar filas, y después llamar a mysql_free_result(result)
    }
    else  // mysql_store_result() no ha devuelto nada; ¿debería haberlo hecho?
    {
        if(mysql_field_count(&mysql) == 0)
        {
            // la consulta no devuelve datos
            // (no fue un SELECT)
            num_rows = mysql_affected_rows(&mysql);
        }
        else // mysql_store_result() ha devuelto datos
        {
            fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
        }
    }
}

Una alternativa consiste en reemplazar la llamada a mysql_field_count(&mysql) con mysql_errno(&mysql). En ese caso, se estará comprobando de forma directa un error de mysql_store_result() en lugar de deducir del valor de retorno de mysql_field_count() si la sentencia fue un SELECT.