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)

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

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




*mysql)
и
query
— можноорганизовать обработку запросов в фоновом режиме. 

"SELECT * FROM user"; *lengths;
0, NULL, 0) 

Об ошибках параметров функции 

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





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

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