Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
166
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

332 Глава Библиотека функций языка С

Поле

 

Хранимая информация

 

char

*user

Имяпользователя

 

char

*passwd

Пароль

 

char

*unix_socket

Путевое имя

 

char

*server_version

Версия сервера

 

char

*host_info

Строка вида

via UNIX

 

 

socket"

 

char

 

После выполнения запроса: строка ви

 

 

да "Rows matched: 2

Changed: 0

 

 

О"

 

char *db

unsigned port unsigned int

unsigned int server_capabilities unsigned int protocol_version unsigned int ield_count

unsigned int server_status unsigned long thread_id my_ulonglong

my_ulonglong insert_id

Имя стандартной базы данных

Порт TCP/IP

Клиентские флаги

Параметры сервера

Версия протокола

Число полей в последней таблице ре зультатов запроса

Статус сервера

Идентификатор потока

Число записей, участвовавших в по следнем запросе

Идентификатор последней записи, при вставке которой было увеличено значение поля счетчика

Значение, используемое утилитой

unsigned long packet_length

Длина пакета в байтах

mysql_status status

Одно из следующих значений:

 

MYSQL_STATUS_READY,

MYSQL STATUS USE RESULT

 

 

 

 

Типы данных

333

Поле

 

 

 

Хранимая информация

 

 

 

fields

 

Массив с описаниями полей таблицы

 

 

 

 

результатов

 

 

MEM_ROOT

field_alloc

 

Буфер полей

 

 

 

 

 

 

True при вызове функции

 

my_bool

reconnect

 

True, если соединение должно вос

 

 

 

 

станавливаться в случае разрыва

 

struct

st_mysql_options

options

Различные

включая установки

 

 

 

 

протокола SSL

 

 

char

 

[9]

 

Случайная строка, посылаемая серве

 

 

 

 

ром при установлении соединения

struct charset_info_st *charset

Название стандартного набора символов

unsigned

server_language

Языксервера

 

 

Эта структура описывает

находящиеся в таблице

результатов

запроса

(табл. 15.2).

 

 

 

 

 

Поле

 

 

 

Хранимая информация

 

 

 

rows

 

Число строк в таблице результатов

unsigned

int fields

 

Число столбцов в таблице результатов

 

 

 

 

Записи таблицы

 

 

MEM_ROOT

 

 

Резидентный буфер

 

В этой структуре содержится информация о столбце таблицы (табл. 15.3). В струк туру MYSQL входит массив структур MYSQL_FIELD, описывающих поля таблицы

334 Глава Библиотека функций языка С

Поле

 

 

 

Хранимая

char

 

 

 

Имя столбца

char

*table

 

Имя таблицы

char

*def

 

 

Значение по умолчанию

 

 

ield_types type

Тип (табл. 15.4)

unsigned

 

length

Размерность

unsigned

int

max_length

Максимальная размерность выбранного на

 

 

 

 

бора записей

unsigned

int

 

Флаги

unsigned

int

decimals

Число десятичных значений

FIELD_TYPE_BLOB

FIELD_TYPE_DATE

FIELD_TYPE_DATETIME

FIELD_TYPE_DOUBLE

FIELD_TYPE_ENUM

FIELD_TYPE_FLOAT

FIELD_TYPE_LONG

FIELD_TYPE_LONGLONG

FIELD_TYPE_LONG_BLOB

FIELD_TYPE_NULL

FIELD_TYPE_SET

FIELD_TYPE_SHORT

FIELD_TYPE_STRING

FIELD TYPE

Типы данных 335

FIELD_TYPE_TINY

FIELD_TYPE_TINY_BLOB

FIELD_TYPE_VAR_STRING

FIELD TYPE YEAR

В этой структуре хранится номер полязаписи. Нумерация полей начинается с нуля.

Эта структура описывает таблицу результатов запроса (табл. 15.5).

Поле

Хранимая информация

my_ulonglong row_count unsigned field_count unsigned int current_f * *data MYSQL_ROWS *data_cursor MEM_ROOT field_alloc MYSQL_ROW row

current_row unsigned long *lengths MYSQL *handle

Число строк в таблице результатов Число столбцов в таблице результатов

Внутренний указатель на столбец Массив с информацией о столбцах Массив записей Указатель текущей записи Резидентный буфер

Описание текущей записи в случае режима не буферизованного чтения

Запись, находящаяся в буфере Массив длин текущих столбцов

Дескриптор сеанса для режима небуферизо ванногочтения

Маркер для etch_row

336Глава Библиотека функций языка С

Вэтой структуре хранится содержимое одной записи таблицы.

Эта структура описывает набор записей.

my_ulonglong

Это целое число, используемое для подсчета количества записей, а также в качестве значения поля счетчика. Оно определено как unsigned long long

Клиентские функции

В этом разделе описаны функции, используемые для взаимодействия с базой данных.

Эта функция определяет количество строк, участвовавших в последнем запросе указанного сеанса. Ее прототип таков:

*mysql)

Для операций обновления (UPDATE), удаления (DELETE) и вставки (INSERT) воз вращается число измененных строк. Для операций выборки (SELECT) возвращается число строк в таблице результатов запроса.

В листинге демонстрируются обновление нескольких записей и последующая проверка их числа с помощью функции ected_rows

ttinclude

main(int char

MYSQL

char *query "UPDATE book SET

Подключение к серверу.

Клиентские функции 337

"test", О, NULL,

"Failed to connect to database. Error:

exit

Обновление нескольких записей.

"Query failed:

else

titles

Закрытие соединения.

mysql_change_user()

Эта функция меняет пользователя и базу данных текущего сеанса. В случае успеш ного завершения возвращается нуль, иначе — код ошибки (перечислены далее в табл. 15.8). Прототип функции таков:

MYSQL *mysql, const char *user,

const char *passwd, const char *db)

Аргумент — это описание соединения, возвращаемое функцией real_connect Значения аргументов user и password должны соответствовать реальному имени пользователя и паролю в таблицах привилегий. Последний аргу мент является необязательным.

В листинге 15.2 функция не разрывая соединение с сер вером, отменяет какую либо ассоциацию с пользователем или базой данных.

338 Глава Библиотека функций языка С

<stdio.h>

char

MYSQL

Подключение к серверу под видом обычного

It

"test", 0, NULL,

"Failed to connect to database. Error:

Удаление привязки к пользователю без разрыва соединения.

NULL, NULL,

"Failed to change user. Error:

Закрытие соединения.

Эта функция возвращает название стандартного набора символов в данном сеансе:

const char *

Применение функции демонстрируется в листинге 15.3.

Клиентские функции

339

<stdio.h>

char

MYSQL

Подключение к серверу под видом обычного

"test", 0, NULL, 0»

"Failed to connect to database. Error:

exit

Выдача информации о сервере и

set:

Version:

Info:

Version:

Version:

Info:

Safe:

Закрытие соединения.

mysql_close()

Эта функция разрывает соединение с сервером и очищает память, связанную с се ансом:

void *mysql)

340 Глава Библиотека функций языка С

Эта функцияявляется устаревшим аналогом функции

MYSQL const char *host, const char

const char *passwd)

Использовать ее не рекомендуется.

mysql_create_db()

Эта устаревшая функция создает базу данных, имя которой указано во втором гументе:

*mysql, const char *db)

Использовать эту функцию не рекомендуется. Лучше посылать инструкцию CREATE DATABASE с помощью функции

mysql_data_seek()

Эта функция перемещает внутренний указатель на требуемую запись в буфере ре зультатов:

void *result, row)

Применяя функцию совместно с можно считывать произвольную запись таблицы результатов. Перед обращением к данной функции необходимо вызвать функцию mysql_store_result ваниеперечисленныхфункцийдемонстрируетсявлистинге 15.4.

#include

 

int

char

MYSQL

 

MYSQL_RES

 

row;

 

char *query

"SELECT State FROM tax ORDER BY State";

 

0, NULL,

Извлечение информации из tax.

Клиентские функции 341

"Query failed:

else

Занесение результатов в буфер. result

Переход на пятнадцатую

raysql_data_seek(result,14);

Выборка записи.

row =

Отображение названия штата.

...

mysql_debug()

Эта функция включает режим отладки:

void char *debug)

Ей требуется передать строку формата наподобие 0, trace либо пустую строку. Во втором случае используется переменная среды MYSQL_DEBUG. Чтобы эта функция была необходимо скомпилировать клиентскую библио теку с включением средств отладки.

ВMySQL применяется библиотека функций отладки Фреда Фиша (Fred Fish).

Оней рассказывается в главе 31, "Расширение возможностейMySQL".

Эта устаревшая функция полностью удаляет указанную базу данных и все ее таблицы:

raysql_drop_db(MYSQL const char

Вместо нее рекомендуется инструкцию DROP DATABASE с помощью функции