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

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

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

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

<string.h>

char

MYSQL mysql;

MYSQL_RES

unsigned long

Задание параметров соединения.

MYSQL_OPT_COMPRESS,

(char

"SET

"root", "mysql", 0, NULL, 0)

result

lengths (int)

(result)

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

int *mysql)

Эта функция выполняет указанный запрос в рамках заданного сеанса: int *mysql, const char *query)

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

Она представляет собой оболочку функции mysql_real_query вызывая функ цию для определения длины запроса. Если в запросе содержится двоичная строка, необходимо обратиться к функции сооб щив ей реальную длину запроса.

Функция mysql_query выполняет одиночный запрос. Символ точки с запятой в конце строки не нужен. За этой функцией должен следовать вызов функции mysql_store_result

В случае успешного выполнения запроса функция возвращает нуль, иначе — нену левое значение. Применение этой функции демонстрируется во многих примерах данной главы.

Эта функция извлекает результаты запроса, посланного ранее функцией

*mysql)

В случае успешного выполнения запроса функция возвращает нуль, иначе — код ошибки.

С помощью этих двух функций — и query — можноорганизовать обработку запросов в фоновом режиме.

сылается серверу, и пока этот запрос обрабатывается, выполняются другие действия (листинг 15.11).

ttinclude <stdio.h>

int

char

MYSQL

MYSQL_RES

const char *query "SELECT * FROM user"; *lengths;

0, NULL, 0)

Отправка

query,

Имитация других действий.

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

Получение результатов запроса.

result

lengths i++)

Эта функция устанавливает соединение с сервером MySQL:

MYSQL *

 

 

 

MYSQL

 

 

 

const

char

*host,

 

const

char

*user,

 

const

char

*passwd,

 

const

char

*db,

 

 

port,

 

 

const char *unix_socket,

 

uint

client_flag)

 

Она заменяет функцию mysql_connect

использовавшуюся в предыдущих вер

сиях MySQL. Как минимум, ей необходимо передать структуру MYSQL,

функцией mysql_init Остальные аргументы можно задать равными NULL. В качестве аргумента host может присутствовать доменное имя или IP адрес. Значение NULL соответствует локальному узлу. Функция пытается подключиться к ло кальному узлу, используя или именованные каналы, если они поддерживаются в операционной системе. Если указан IP адрес, соединение устанавливается по прото колам

Значение NULL в качестве имени пользователя соответствует текущему пользова телю, запустившему программу. Пароль предоставляется в незашифрованном виде (функция сама выполняет шифрование). Если аргумент равен NULL, пароль будет пустым.

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

Аргумент определяет стандартную базу данных. Аргумент port задает номер та TCP/IP. В случае нулевого значения будет использован стандартный порт 3306. гумент unix_socket должен содержать путь к файлу или именованного канала.

Аргумент client_flag представляет собой битовое поле, в котором задаются различные опции (табл. 15.7). Некоторые из них перекрывают опции, заданные в функции

Константа

Директива

 

 

Сжимать данные, передаваемые между клиентом и

 

 

вером

 

 

Сообщать число найденных записей, а не число изме

 

ненных записей

 

CLIENT_IGNORE_SPACE Разрешить пробелы между именем функции и откры

 

вающей скобкой

 

CLIENT_INTERACTIVE

Разрывать соединение по истечении интервала тайм

 

аута, заданного в переменной

a

 

wait timeout

 

 

He разрешать синтаксис

 

 

Работать с клиентом по протоколу ODBC

 

CLIENT_SSL

Шифровать соединение с помощью протокола SSL

 

В табл. 15.8 перечислены коды ошибок, генерируемые функцией connect В случае успешного завершения функция возвращает указатель на структу ру, содержащую описание соединения. При возникновении ошибки возвращается NULL.

Константа

Описание

Команды выполнялись в неправильном порядке

CR_SERVER_GONE_ERROR

Сервер не отвечает

Во время выполнения запроса пропала связь с сервером

ошибка

ER_ACCESS_DENIED_ERROR Имяпользователяилипароль неверны

ER_BAD_DB_ERROR

Имя базыданных не распознано

 

Пользователю отказано в доступе

 

Команда не реализована

 

Имя базы данных слишком длинное

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

Применение функции mysql_real_connect демонстрируется во многих при мерах данной главы.

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

( MYSQL

char *to, char

ulong length)

Функция извлекает строку из аргумента и помещает ее преобразованную вер сию в аргумент to. Преобразование осуществляется с учетом используемого набора символов. Функция возвращает количество символов в полученной строке.

Аргумент to должен указывать на в котором уместится преобразованная строка. Худший случай — это когда придется защищать от интерпретации каждый символ. Кроме того, добавляется еще и символ конца строки, поэтому к удвоенному размеру исходной строки нужно еще добавить единицу.

В листинге 15.12 функция читает аргументы ко мандной строки и заносит их в преобразованном виде в таблицу tax.

<stdio.h>

char

MYSQL char

char char rate char

0, NULL,

4)

"Wrong number of

Извлечение аргументов командной строки.

state,

 

rate,

query (char *)my_malloc (4096,

 

"INSERT INTO

%s,

state, rate,

 

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

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

MYSQL ROWS * row RES *res)

Эта функция задает стандартную базу данных:

const char *db)

В случае успешного завершения возвращается нуль.

Эта функция посылает серверу запрос, но не ждет получения его результатов:

int

mysql, const char* query, length)

Результаты можно извлечь позднее с помощью функции mysql_read_query_ result С помощью этих двух функций можно организовать фоновую обработку длинных запросов, что позволит программе оперативнее реагировать на действия пользователя. Соответствующий пример приводился в листинге

Эта функция останавливает работу сервера:

int

mysql_ssl_cipher()

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

char *

mysql_ssl_clear()

Эта функция освобождает память, выделенную функцией int *mysql)

Эта функция подготавливает клиентскую программу к шифрованию соединения по протоколу SSL(Secure Sockets Layer — протокол защищенных

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

359

MYSQL *mysql, const char *key, const char *cert, const char *ca,

const char *capath)

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

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

mysql_stat()

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

char *

Аналогичная информация возвращается командой status.

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

MYSQL_RES * *mysql)

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

Применение функции демонстрируется во многих при мерах данной главы.

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

Данный идентификатор появится в списке, который возвращается инструкцией SHOW PROCESSLIST. Его (идентификатор) можно передать функции чтобы разорвать соединение с сервером. В случае повторного подключения к серверу идентификатор потока меняется.

mysql_thread_safe()

Эта функция возвращает 1, если на этапе компиляции в клиентскую библиотеку были включены средства поддержки безопасной работы потоков:

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

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

MYSQL_RES * *mysql)

Работая с набором записей данного типа, клиентская библиотека извлекает по од ной записи за раз с помощью функции Применять функции к таким наборам нельзя.

Функции работы с массивами

Ниже перечислены функции, предназначенные для работы с динамическими мас сивами.

byte

*array)

void

*array)

void

*array,

void

*array)

void

*array, element, uint idx)

*array,

uint uint init_alloc, uint

*array, gptr element)

byte

*array)

*array, gptr element, uint idx)

Функции работы с наборами символов

Ниже перечислены функции, предназначенные для работы с наборами символов.

*

char *cs_name)

void

STRING *s, const char *name)

Функции работы с наборами символов 361

char DYNAMIC_STRING *s)

*array, struct *fb)

*

**table, size_t

*

**table, const char *name, size_t tablesz)

*

*

char

char *

uint8

char

void

*

flags)

CHARSET_INFO *

char myf

void

char *buf)

const char *

uint

char

char *

*buf)

*

*

char *name)

my_bool

simpleconfig_buf_st *fb, char *buf)