mysql_num_fields()
unsigned int mysql_num_fields(MYSQL_RES *result)
ou
unsigned int mysql_num_fields(MYSQL *mysql)
A segunda forma não funciona na versão 3.22.24 ou mais novas do MariaDB. Para passar um argumento MYSQL*
você de utilizar unsigned int mysql_field_count(MYSQL *mysql)
em seu lugar.
Descrição
Retorna o número de colunas em um resultado.
Note que você pode obter o número de colunas com um ponteiro para o conjunto de resultados ou para um manipulador (handle) de conexão. Você usaria o manipular de conexão se mysql_store_result()
ou mysql_use_result()
retorna NULL
(então você não tem um ponteiro para o resultado). Neste caso, você pode chamar mysql_field_count()
para determinar se mysql_store_result()
não produziu um resultado vazio. Isto permite que o programa cliente tome a ação apropriada sem saber se a consulta foi uma instrução SELECT
(ou do tipo SELECT
). O exemplo mostrado abaixo ilustra como isto pode ser feito.
See "Porque Algumas Vezes mysql_store_result()
Retorna NULL
Após mysql_query()
Returnar com Sucesso?".
Valor Retornado
Um unsigned integer (inteiro sem sinal) representando o número de campos no conjunto de resultasdos.
Erros
Nenhum.
Exemplo
MYSQL_RES *result; unsigned int num_fields; unsigned int num_rows; if (mysql_query(&mysql,query_string)) { // erro } else // query succeeded, process any data returned by it { result = mysql_store_result(&mysql); if (result) // existem resgitros { num_fields = mysql_num_fields(result); // retorna registros e chama mysql_free_result(result) } else // mysql_store_result() retorna vazio; era esperado? { if (mysql_errno(&mysql)) { fprintf(stderr, 'Error: %s\n', mysql_error(&mysql)); } else if (mysql_field_count(&mysql) == 0) { // consulta não retora dados // (ela não era um SELECT) num_rows = mysql_affected_rows(&mysql); } } }
Uma alternativa (se você souber qyue a sua consulta retornou um resultado) é substituir a chamada mysql_errno(&mysql)
pela verificação de se mysql_field_count(&mysql)
é = 0. Isto só acontece se alguma coisa der errado.