
MySQL. Библиотека профессионала - Аткинсон Л
..pdf
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)


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 — протокол защищенных


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)