8.4.3.150 mysql_num_fields()
unsigned int mysql_num_fields(MYSQL_RES *result)
или
unsigned int mysql_num_fields(MYSQL *mysql)
Вторая форма не работает на версии MySQL 3.22.24 или более новой. Вместо
аргумента в параметре MYSQL*
необходимо использовать выражение unsigned
int mysql_field_count(MYSQL *mysql)
8.4.3.151 Описание
Возвращает количество столбцов в результирующем наборе.
Следует отметить, что можно получить искомое количество столбцов с помощью
указателя или на результирующий набор, или на дескриптор соединения.
Дескриптор соединения необходимо использовать, если функции
mysql_store_result()
или mysql_use_result()
возвратили NULL
(и,
следовательно, отсутствует указатель результирующего набора). В этом
случае можно вызвать функцию mysql_field_count()
для определения, может ли
функция mysql_store_result()
выдать непустой результат. Это дает
возможность данной клиентской программе выполнить соответствующее действие
без уточнения, был ли данный запрос командой вида SELECT
(или похожей на
SELECT
). В приведенном ниже примере иллюстрируется, как это можно сделать.
See section 8.4.6.1 Почему после успешных возвратов функции mysql_query()
функция mysql_store_result()
иногда возвращает NULL
?.
8.4.3.152 Возвращаемые значения
Беззнаковое целое число, представляющее количество полей в результирующем
наборе.
8.4.3.153 Ошибки
Нет.
8.4.3.154 Пример
MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;
if (mysql_query(&mysql,query_string))
{
// ошибка
}
else // запрос выполнен, обработка возвращенных им данных
{
result = mysql_store_result(&mysql);
if (result) // содержит строки {
num_fields = mysql_num_fields(result);
// извлечение строк, затем вызов mysql_free_result(result)
}
else // mysql_store_result()не вернула ничего; может ли что-либо вернуть?
{
if (mysql_errno(&mysql))
{
fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
}
else if (mysql_field_count(&mysql) == 0)
{
// запрос не возвращает данные
// (запрос не был вида SELECT)
num_rows = mysql_affected_rows(&mysql);
}
}
}
Альтернатива (если известно, что данный запрос должен вернуть
результирующий набор) состоит в замене вызова функции mysql_errno(&mysql)
на проверку, равна ли 0 функция mysql_field_count(&mysql)
. Это может
случиться, только если что-нибудь происходило не так.