-
MYSQLДанная структура представляет дескриптор соединения с базой данных. Используется почти во всех функциях MySQL.
-
MYSQL_RESЭта структура содержит результат запроса, возвратившего строки (
SELECT,SHOW,DESCRIBE,EXPLAIN). Возвращенная из запроса информация далее в этом разделе называется результирующим набором данных. -
MYSQL_ROWЯвляется ``типобезопасным'' представлением данных одной строки. В настоящее время этот тип реализован как массив строк с фиксированным количеством байтов (их нельзя трактовать как строки с нулевым символом в конце, если величины полей могут содержать двоичные данные, поскольку они могут содержать ноль байтов). Строки можно получить вызовом функции
mysql_fetch_row(). -
MYSQL_FIELDДанная структура содержит информацию об отдельном поле таблицы: имя поля, тип и его размер. Элементы данной структуры детально описаны в этом разделе ниже. Для каждого поля можно получить структуру
MYSQL_FIELD, последовательно вызывая функциюmysql_fetch_field(). Величины полей не являются частью данной структуры, они содержатся в структуреMYSQL_ROW. -
MYSQL_FIELD_OFFSET``Типобезопасное'' представление позиции поля в списке полей MySQL. (используется функцией
mysql_field_seek()). Позиции представляют собой номера полей внутри строки, причем нумерация начинается с нуля. -
my_ulonglongДанный тип используется для возврата количества строк, а также в функциях
mysql_affected_rows(),mysql_num_rows()иmysql_insert_id(). Этот тип обеспечивает диапазон изменений величин от 0 до 1.84e19. Может не работать в некоторых системах при выводе величины типаmy_ulonglong. Для вывода подобной величины следует преобразовать ее в типunsigned longи использовать формат%lu. Пример:printf (Количество строк: %lu\n", (unsigned long) mysql_num_rows(result));
Структура MYSQL_FIELD содержит следующие перечисленные ниже элементы:
-
char * nameИмя данного поля, заданное строкой с нулевым символом в конце.
-
char * tableИмя таблицы, содержащей это поле, если оно невычисляемое. Для полей, получаемых в результате вычислений, величина
tableпредставляет собой пустую строку. -
char * defЗначение по умолчанию этого поля, заданное строкой с нулевым символом в конце. Задается только при использовании функции
mysql_list_fields(). -
enum enum_field_types typeТип данного поля. Величина
typeможет быть одной из следующих:Тип величины Описание типа FIELD_TYPE_TINYПоле TINYINTFIELD_TYPE_SHORTПоле SMALLINTFIELD_TYPE_LONGПоле INTEGERFIELD_TYPE_INT24Поле MEDIUMINTFIELD_TYPE_LONGLONGПоле BIGINTFIELD_TYPE_DECIMALПоле DECIMALилиNUMERICFIELD_TYPE_FLOATПоле FLOATFIELD_TYPE_DOUBLEПоле DOUBLEилиREALFIELD_TYPE_TIMESTAMPПоле TIMESTAMPFIELD_TYPE_DATEПоле DATEFIELD_TYPE_TIMEПоле TIMEFIELD_TYPE_DATETIMEПоле DATETIMEFIELD_TYPE_YEARПоле YEARFIELD_TYPE_STRINGСтрока поля ( CHARилиVARCHAR)FIELD_TYPE_BLOBBLOBилиTEXTполе (используетсяmax_lengthдля определения максимальной длинны)FIELD_TYPE_SETПоле типа SETFIELD_TYPE_ENUMПоле типа ENUMFIELD_TYPE_NULLПоле типа NULLFIELD_TYPE_CHARНе рекомендуется; лучше использовать FIELD_TYPE_TINYМожно использовать макрос
IS_NUM()для проверки, является ли тип поля числовым. В макросеIS_NUM()следует указать величинуtypeи, если поле имеет числовой тип, будет возвращено значениеTRUE:if (IS_NUM(field->type)) printf("Field is numeric\n"); -
unsigned int lengthРазмер данного поля в том виде, в каком он указан в определении таблицы.
-
unsigned int max_lengthМаксимальный размер данного поля в результирующем наборе данных (длина самой большой величины поля для строк в текущем результирующем наборе данных). При использовании
mysql_store_result()илиmysql_list_fields()данная переменная содержит максимальную длину для данного поля. При использованииmysql_use_result()значение этой переменной равно нулю. -
unsigned int flagsРазличные двоичные флаги для данного поля. Величина
flagsможет иметь ноль или больше двоичных значений следующего набора флагов:Значение флага описание флага NOT_NULL_FLAGПоле не может содержать значение NULLPRI_KEY_FLAGПоле является частью первичного ключа UNIQUE_KEY_FLAGПоле является частью уникального ключа MULTIPLE_KEY_FLAGПоле является частью не уникального ключа UNSIGNED_FLAGПоле имеет атрибут UNSIGNEDZEROFILL_FLAGПоле имеет атрибут ZEROFILLBINARY_FLAGПоле имеет атрибут BINARYAUTO_INCREMENT_FLAGПоле имеет атрибут AUTO_INCREMENTENUM_FLAGПоле имеет тип ENUM(не рекомендуется)SET_FLAGПоле имеет тип SET(не рекомендуется)BLOB_FLAGПоле имеет тип BLOBилиTEXT(не рекомендуется)TIMESTAMP_FLAGПоле имеет тип TIMESTAMP(не рекомендуется)Использование флагов
BLOB_FLAG,ENUM_FLAG,SET_FLAGиTIMESTAMP_FLAGне рекомендуется, поскольку они указывают скорее тип поля, чем атрибут этого типа. Вместо этого более предпочтительно определять тип поля описанным выше способомfield->typeв отношении полейFIELD_TYPE_BLOB,FIELD_TYPE_ENUM,FIELD_TYPE_SETилиFIELD_TYPE_TIMESTAMP. Следующий пример иллюстрирует типичное использование величиныflags:if (field->flags & NOT_NULL_FLAG) printf("Field can't be null\n");Можно использовать следующие возможности макросов для определения булевого значения величины
flags:Статус флага Описание IS_NOT_NULL(flags)Возвращает TRUE, если данное поле определено как NOT NULLIS_PRI_KEY(flags)Возвращает TRUE, если данное поле является первичным ключом IS_BLOB(flags)Возвращает TRUE, если данное поле имеет тип BLOBилиTEXT(не рекомендуется; более предпочтительноfield->type) -
unsigned int decimalsВозвращает число десятичных знаков для числовых полей.