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 MySQL. 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.
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.
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.