Spec-Zone .ru
спецификации, руководства, описания, API
|
Готовые операторы используют несколько структур данных:
Чтобы получить дескриптор оператора, передайте a MYSQL
обработчик соединения к mysql_stmt_init()
, который возвращает указатель на a MYSQL_STMT
структура данных. Эта структура используется для дальнейших
операций с оператором. Чтобы определить оператор, чтобы подготовиться, передайте MYSQL_STMT
указатель и оператор представляют в виде строки к mysql_stmt_prepare()
.
Чтобы обеспечить входные параметры для готового оператора, установить MYSQL_BIND
структуры и передают их к mysql_stmt_bind_param()
. Чтобы получить выходные значения столбцов,
установить MYSQL_BIND
структуры и передают их к mysql_stmt_bind_result()
.
MYSQL_TIME
структура используется, чтобы передать
временные данные в обоих направлениях.
Следующее обсуждение описывает готовые типы данных оператора подробно. Для примеров, которые показывают, как
использовать их, см. Раздел 22.8.11.10,"mysql_stmt_execute()
"
, и Раздел
22.8.11.11,"mysql_stmt_fetch()
".
Эта структура является дескриптором для готового оператора. Дескриптор создается, вызывая mysql_stmt_init()
,
который возвращает указатель на a MYSQL_STMT
. Дескриптор используется
для всех последующих операций с оператором, пока Вы не закрываете это с mysql_stmt_close()
, в которой точке дескриптор становится
недопустимым.
MYSQL_STMT
у структуры нет никаких элементов, предназначенных для
использования приложения. Приложения не должны попытаться скопировать a MYSQL_STMT
структура. Нет никакой гарантии, что такая копия будет применима.
Многократные дескрипторы оператора могут быть связаны с единственным соединением. Предел на числе дескрипторов зависит от доступных системных ресурсов.
Эта структура используется оба для ввода оператора (значения данных, отправленные серверу), и выводила (значения результата, возвращенные из сервера):
Для ввода использовать MYSQL_BIND
структуры с mysql_stmt_bind_param()
связывать значения данных параметра с буферами для использования mysql_stmt_execute()
.
Для вывода использовать MYSQL_BIND
структуры с mysql_stmt_bind_result()
связывать буферы со столбцами набора результатов, для использования в выборке строк с mysql_stmt_fetch()
.
Использовать a MYSQL_BIND
структура, обнулите ее содержание, чтобы
инициализировать это, затем установите ее элементы соответственно. Например, чтобы объявить и
инициализировать массив три MYSQL_BIND
структуры, используйте этот код:
MYSQL_BIND bind[3];memset(bind, 0, sizeof(bind));
MYSQL_BIND
структура содержит следующие элементы для использования
прикладными программами. Для нескольких из элементов способ использования зависит от того,
используется ли структура для ввода или вывода.
enum enum_field_types buffer_type
Тип буфера. Этот элемент указывает на тип данных переменной языка C, связанной со
столбцом параметра оператора или набора результатов. Для ввода, buffer_type
указывает на тип переменной, содержащей значение, которое будет отправлено серверу. Для
вывода это указывает на тип переменной, в которую должно быть сохранено значение,
полученное от сервера. Для допустимого buffer_type
значения, см. Раздел 22.8.9.1,
"API C Готовые Коды Типа Оператора".
void *buffer
Указатель на буфер, который будет использоваться для передачи данных. Это - адрес переменной языка C.
Для ввода, buffer
указатель на переменную, в которой Вы
храните значение данных для параметра оператора. Когда Вы вызываете mysql_stmt_execute()
, Использование MySQL значение,
сохраненное в переменной вместо соответствующего маркера параметра в операторе
(определенный с ?
в строке оператора).
Для вывода, buffer
указатель на переменную, в которой можно
возвратить значение столбца набора результатов. Когда Вы вызываете mysql_stmt_fetch()
, MySQL хранит значение столбца от
текущей строки набора результатов в этой переменной. Можно получить доступ к значению,
когда вызов возвращается.
Чтобы минимизировать потребность в MySQL, чтобы выполнить преобразования типов между значениями языка C на стороне клиента и значениями SQL на стороне сервера, используйте переменные C, у которых есть типы, подобные таковым из соответствующих значений SQL:
Для типов числовых данных, buffer
должен указать на переменную надлежащего
числового типа C. Для целочисленных переменных (который может быть char
для однобайтовых значений или целочисленного
типа для больших значений), следует также указать, имеет ли переменная unsigned
атрибут, устанавливая is_unsigned
элемент, описанный позже.
Для символьных (недвоичных) и типов данных двоичных строк,
buffer
должен указать на символьный буфер.
Для даты и типов данных времени, buffer
должен указать на a MYSQL_TIME
структура.
Для направляющих линий об отображении между типами C и типами SQL и примечаниями о преобразованиях типов, см. Раздел 22.8.9.1, "API C Готовые Коды Типа Оператора", и Раздел 22.8.9.2, "API C Готовые Преобразования типов Оператора".
unsigned long buffer_length
Фактический размер *buffer
в байтах. Это указывает на
максимальный объем данных, который может быть сохранен в буфере. Для символа и двоичного
файла C данные, buffer_length
значение определяет длину
*buffer
когда использующийся с mysql_stmt_bind_param()
определить входные значения,
или максимальное количество байтов выходных данных, которые могут быть выбраны в буфер
когда использующийся с mysql_stmt_bind_result()
.
unsigned long *length
Указатель на unsigned long
переменная, которая указывает на
фактическое число байтов данных, хранивших в *buffer
. length
используется для символа или двоичного файла C
данные.
Для входной привязки данных параметра, набора *length
указать на фактическую длину значения параметра, сохраненного в *buffer
.
Это используется mysql_stmt_execute()
.
Для привязки выходного значения, наборов MySQL *length
когда Вы вызываете mysql_stmt_fetch()
.
mysql_stmt_fetch()
возвращаемое значение определяет,
как интерпретировать длину:
Если возвращаемое значение 0, *length
указывает на фактическую длину значения
параметра.
Если возвращаемое значение MYSQL_DATA_TRUNCATED
,
*length
указывает на неусеченную длину значения
параметра. В этом случае, минимум *length
и buffer_length
указывает на фактическую длину
значения.
length
игнорируется для числовых и временных типов данных
потому что buffer_type
значение определяет длину значения
данных.
Если следует определить длину возвращенного значения прежде, чем выбрать это, см. Раздел 22.8.11.11,"mysql_stmt_fetch()
", для некоторых стратегий.
my_bool *is_null
Этот элемент указывает на a my_bool
переменная, которая
является истиной, если значение NULL
, ложь, если это не
NULL
. Для ввода, набора *is_null
к истине, чтобы указать, что Вы передаете a
NULL
оцените как параметр оператора.
is_null
указатель на
булев скаляр, не булев скаляр, чтобы обеспечить гибкость в том, как Вы определяете NULL
значения:
Если Ваши значения данных всегда NULL
, использовать MYSQL_TYPE_NULL
как buffer_type
оцените, когда Вы связываете
столбец. Другой MYSQL_BIND
элементы, включая is_null
, не иметь значения.
Если Ваши значения данных всегда NOT
NULL
, набор is_null = (my_bool*) 0
, и набор
другие элементы соответственно для переменной Вы связываете.
Во всех других случаях, набор другие элементы
соответственно и набор is_null
к адресу a my_bool
переменная. Набор, что значение
переменной к истине или лжи соответственно между выполнением, чтобы указать,
является ли соответствующее значение данных NULL
или NOT NULL
, соответственно.
Для вывода, когда Вы выбираете строку, MySQL устанавливает значение, которым указывают
is_null
к истине или лжи согласно тому, является ли
значение столбца набора результатов, возвращенное из оператора, или не NULL
.
my_bool is_unsigned
Этот элемент просит переменные C с типами данных, которые могут быть unsigned
(char
, short int
, int
, long long int
). Набор is_unsigned
к истине, если переменная, которой указывают
buffer
unsigned
и ложь иначе.
Например, если Вы связываете a signed char
переменная к
buffer
, определите код типа MYSQL_TYPE_TINY
и набор is_unsigned
ко лжи. Если Вы связываете unsigned char
вместо этого, код типа является тем же
самым, но is_unsigned
должна быть истина. (Для char
, это не определяется, подписывается ли это или без
знака, так лучше быть явным о signedness при использовании signed
char
или unsigned char
.)
is_unsigned
применяется только к переменной языка C на
стороне клиента. Это указывает, что ничто о signedness соответствующего SQL не оценивает
стороной сервера. Например, если Вы используете int
переменная, чтобы предоставить значение для a BIGINT
UNSIGNED
столбец, is_unsigned
должна быть ложь
потому что int
подписанный тип. Если Вы используете unsigned int
переменная, чтобы предоставить значение для
a BIGINT
столбец, is_unsigned
должна быть истина потому что unsigned int
тип без знака. MySQL выполняет надлежащее
преобразование между подписанными и значениями без знака в обоих направлениях, хотя
предупреждение происходит, если усечение заканчивается.
my_bool *error
Для вывода, набор этот элемент, чтобы указать на a my_bool
переменная, чтобы иметь информацию об усечении для параметра, сохраненного там после
работы выборки строки. Когда создание отчетов усечения включается, mysql_stmt_fetch()
возвраты MYSQL_DATA_TRUNCATED
и *error
истина в MYSQL_BIND
структуры для параметров, в которых произошло усечение. Усечение указывает на потерю
знака или существенных цифр, или что строка была слишком длинной, чтобы поместиться в
столбец. Создание отчетов усечения включается по умолчанию, но может управляться,
вызывая mysql_options()
с MYSQL_REPORT_DATA_TRUNCATION
опция.
Эта структура используется, чтобы отправить и получить DATE
, TIME
, DATETIME
, и TIMESTAMP
данные непосредственно к и от сервера. Установите buffer
элемент, чтобы указать на a MYSQL_TIME
структура, и набор buffer_type
элемент a MYSQL_BIND
структура к одному из временных типов (MYSQL_TYPE_TIME
, MYSQL_TYPE_DATE
, MYSQL_TYPE_DATETIME
, MYSQL_TYPE_TIMESTAMP
).
MYSQL_TIME
структура содержит элементы, перечисленные в следующей
таблице.
Элемент | Описание |
---|---|
unsigned int year |
Год |
unsigned int month |
Месяц года |
unsigned int day |
День месяца |
unsigned int hour |
Час дня |
unsigned int minute |
Минута часа |
unsigned int second |
Вторая из минуты |
my_bool neg |
Булев флаг, указывающий, отрицательно ли время |
unsigned long second_part |
Дробная часть второго в микросекундах (неиспользованный перед MySQL5.6.4) |
Только те части a MYSQL_TIME
структура, которые применяются к данному
типу временного значения, используется. year
, month
,
и day
элементы используются для DATE
, DATETIME
, и TIMESTAMP
значения. hour
, minute
, и second
элементы используются
для TIME
,
DATETIME
,
и TIMESTAMP
значения. См. Раздел
22.8.19, "API C Готовая Обработка Оператора Даты и Временных стоимостей".