Справочное руководство по MySQL

8.4.3.150 mysql_num_fields()

    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). Это может случиться, только если что-нибудь происходило не так.




Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости