-
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
Поле TINYINT
FIELD_TYPE_SHORT
Поле SMALLINT
FIELD_TYPE_LONG
Поле INTEGER
FIELD_TYPE_INT24
Поле MEDIUMINT
FIELD_TYPE_LONGLONG
Поле BIGINT
FIELD_TYPE_DECIMAL
Поле DECIMAL
илиNUMERIC
FIELD_TYPE_FLOAT
Поле FLOAT
FIELD_TYPE_DOUBLE
Поле DOUBLE
илиREAL
FIELD_TYPE_TIMESTAMP
Поле TIMESTAMP
FIELD_TYPE_DATE
Поле DATE
FIELD_TYPE_TIME
Поле TIME
FIELD_TYPE_DATETIME
Поле DATETIME
FIELD_TYPE_YEAR
Поле YEAR
FIELD_TYPE_STRING
Строка поля ( CHAR
илиVARCHAR
)FIELD_TYPE_BLOB
BLOB
илиTEXT
поле (используетсяmax_length
для определения максимальной длинны)FIELD_TYPE_SET
Поле типа SET
FIELD_TYPE_ENUM
Поле типа ENUM
FIELD_TYPE_NULL
Поле типа NULL
FIELD_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
Поле не может содержать значение NULL
PRI_KEY_FLAG
Поле является частью первичного ключа UNIQUE_KEY_FLAG
Поле является частью уникального ключа MULTIPLE_KEY_FLAG
Поле является частью не уникального ключа UNSIGNED_FLAG
Поле имеет атрибут UNSIGNED
ZEROFILL_FLAG
Поле имеет атрибут ZEROFILL
BINARY_FLAG
Поле имеет атрибут BINARY
AUTO_INCREMENT_FLAG
Поле имеет атрибут AUTO_INCREMENT
ENUM_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 NULL
IS_PRI_KEY(flags)
Возвращает TRUE, если данное поле является первичным ключом IS_BLOB(flags)
Возвращает TRUE, если данное поле имеет тип BLOB
илиTEXT
(не рекомендуется; более предпочтительноfield->type
) -
unsigned int decimals
Возвращает число десятичных знаков для числовых полей.