поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    8.4.1. Типы данных C API

    • 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

      Возвращает число десятичных знаков для числовых полей.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100