|
Программирование >> Программный интерфейс приложений
printf ( column %u: name = %s max length = %lu\n , i, field->name, field->max length); Функция mysql fetch f ield direct о не работает в версиях MySQL, предшествующих серии 3.23. unsigned long * inysql fetch lengths (mysql res *res set); Возвращает указатель на массив значений unsigned long, представляющих длины столбцов в текущей строке результирующего набора. Функцию mysql fetch lengths () необходимо вызывать при каждом вызове функции mysql fetch row(), иначе длины столбцов не будут синхронизированы с их значениями. Для значений null длина равна нулю, однако нулевая длина сама по себе не является обязательным фактом наличия значения null. Поскольку длина пустой строки также равна нулю, пользователь еще должен проверить, является ли заданное значение столбца указателем null. В следующем примере выводятся длины столбцов и значения текущей cipoKii, причем на месте значения null выводится строка null : unsigned long *length; length = mysql fetch length (res set); for (i = 0; i < mysql num fields (res set); printf ( length is %lu, value is %s\n , length[i], (row[i] != NULL ? row[il : NULL )); Функция mysql fetch lengths () впервые появилась в MySQL 3.20.5. В версиях MySQL, предшествующих 3.22.7, возвращаемое ею значение имело тип unsigned int. mysql row mysql fetch row (mysql res *res set); Возвращает указатель на следующую строку результирующего набора, предстааленного в виде массива строк (лишь значения столбцов null представляются в виде указателей на null), i-e значение строки является i-м элементом массива значений. Значения всех типов данных, в том числе и числовых, представлены в виде строк. Поэтому перед выполнением какой-либо числовой операции над значением необходимо сначала его преобразовать, например, с помощью функции atoi () или atof (). Если в результирующем наборе не остается строк, функция mysqlf etch row () возвращает значение null. (Если для инициализации построчной выборки результирующего набора используется функция mysql use result (), функция mysql fetch row () возвращает значение null еще и в случае возникновения ошибки при связи.) Информационные значения заканчиваются нулями, однако значения с двоичными данными следует обрабатывать не как строки, завершающиеся значением null, а как строки фиксированной длины. (Для определения длины значения столбца воспользуйтесь функцией mysql f etch length ().) В следующем примере показано, как организовать просмотр строк со значениями данных и определить, какие из значений равны null: MyS0L ROW row; unsigned int i; while ((row = raysql fetch row (res set) ) != NULL) { for (i =0; i < mysql num fields (res set); i++) { printf ( column %u: value is %s\n , i, (row[i] == NULL ? NULL : not NULL )); Для определения типов значений столбцов можно использовать метаданные столбцов, записанные в информационных структурах столбцов mysql field. Как отмечалось ранее, доступ к ним можно пол>Чить с помощью функций mysql fetch field(), mysql fetch fields() ИЛИ mysql field direct(). unsigned int mysql field count (mysql *conn) Возвращает число столбцов для последнего запроса заданного соединения. Эта функция обычно используется в тех случаях, когда функции mysql store resultО или mysql use result() возвращают значение null. Функция mysql field count() позволяет определить, должен ли возвращаться результирующий набор. Возвращаемое ею значение О отражает отсутствие результируюшего набора, а соответственно и отсутствие ошибки. Ненулевое значение показывает, что столбцы ожидаются и, поскольку они отсутствуют, имеет место ошибка. В следующем примере показано, как использовать функцию mysql f ield count О ДЛЯ определения наличия ошибок: res set = mysql store result (conn); if (res set == NULL) /* результирующий набор не бьш возвращен */ * Объясняется ли отсутствие результирующего * набора ошибкой, либо набор вовсе не должен возвращаться? V if (mysql field count (conn) > 0) ( * результирующий набор ожидался, но функция mysql store result () jTa не возвратила его, что означает наличие ошибки printf ( Problem processing result set\n ); else { * результирующий набор не ожидался; * запрос не возвратил данные (это не был * запрос SELECT, SHOW, DESCRIBE или * EXPLAIN), поэтому запрос определяет * только число измененных строк V printf ( %lu rows affected\n (unsigned long)mysql affected rows (conn)); else /* результирующий набор возвращен */ { /* ... обработка строк ... */ mysql free result (res set); Функция mysqlf ield count () впервые появилась в MySQI 3.22.24. До этой версии для подобных целей использовалась функ ция mysqlnumf ields (). Для написания функции, которая бь работала в любой версии MySQL, добавьте в любой файл, исполь зующий функцию mysql f ield count (), следующий фрагмент кода: #if idefined(MYSQL VERSION ID) MYSQL VERSION ID<32224 #define mysql field count mysql num fields #endif Этот фрагмент заменяет функцию mysql f ield count () функцией mysql num f ields () при компиляции исходного кода в более старых версиях MySQL. mysql field offset mysql field seek (mysql res *res set, mysql field offset offset); Находит информационную структуру столбца, определенную аргументом offset. В результате при следующем вызове функции mysql fetch f ield () будет возвращена информационная структура для заданного столбца. Аргумент offset не является индексом столбца. Он представляет собой значение mysql field offset, полученное в результате более раннего вызова функции mysql f ield teH () или mysql f ield see)c (). Для возвращения к первому столбцу задайте значение аргумента offset равным 0. mysql field offset mysql field tell (mysql res *res set); Освобождает память, используемую результирующим набором. Функцию mysql f ield tell () необходимо вызывать для каждого
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |