MySQL. Библиотека профессионала - Аткинсон Л
..pdf342 Глава Библиотека функций языка С
Эта функция заставляет сервер записывать отладочную информацию в журналь ный файл:
mysql_eof()
Эта устаревшая функция проверяет, достигнут ли конец результирующего набора записей:
my_bool *res)
Вместо нее предпочтительнее пользоваться mysql_fetch_row
mysql_errno()
Эта функция возвращает код ошибки последней операции:
*mysql)
Если ошибок не было, возвращается нуль. Список кодов ошибок и соответствую щих им сообщений приведен в приложении Г, "Коды ошибок MySQL".
В листинге 15.5 будет выдано следующее сообщение:
Query failed: (1064) You have an error in your SQL syntax near at
#include
int char
MYSQL
0, NULL,
Попытка выполнить неправильный запрос.
"SELECT FROM
"Query failed: (%d)
функции 343
mysql_error()
Эта функция воз вращает об ошибке, соответствующее последней опе рации:
char * *mysql)
Если ошибок не возвращается пустая строка. Список кодов ошибок и ветствующих им сообщений приведен в приложении Г, "Коды ошибок MySQL". При мер использования функции приводился в листинге 15.5.
Эта устаревшая функция добавляет к заданной строке символы обратной косой черты, что позволяет использовать строку в SQL инструкциях:
char *to, const char ulong length)
Эта функция игнорирует сведения о наборе символов. Вместо нее лучше пользо ваться mysql_real_escape_string
Эта функция извлекает информацию о столбцах таблицы результатов, по одному
MYSQL_FIELD *
В MySQL хранится внутренний указатель на текущий столбец. Этот указатель изме няется после каждой следующей операции выборки столбца. Когда столбцов не ся, возвращается NULL. Указатель сбрасывается в момент поступления нового запроса. Его можно также изменять вручную с помощью функцииield_seek
Функция возвращает структуру MYSQL_FIELD, описание которой было приведено выше. В режиме небуферизованного чтения размерность столбцов типа BLOB устанавливается равной 8 Кбайт, а не реальной размерности. Ес ли же результаты запроса заносятся в буфер, учитывается размерность самого боль шого значения столбца.
В листинге 15.6 с помощью функции отображается ин формация о каждом столбце таблицы tax.
<stdio.h>
char
MYSQL
344 Глава Библиотека функций языка
MYSQL_RES
MYSQL_FIELD
0, NULL,
"SELECT * FROM result
Получение информации о столбцах.
Value:
Эта функция возвращает структуру с информацией о заданном столбце таблицы результатов:
MYSQL_FIELD *
Нумерация столбцов начинается с нуля. В остальном данная функция аналогична функции ield
Эта функция извлекает информацию обо всех столбцах таблицы результатов и возвращает массив структур
MYSQL_FIELD * *res)
Определить общее количество столбцов в таблице позволяет функция mysql_ ields Программа, представленная в листинге 15.7, выводит данные о каж дом элементе массива столбцов.
#include <stdio.h> ttinclude
char
Клиентские функции 345
MYSQL MYSQL_RES
row; MYSQL_FIELD unsigned unsigned long unsigned int
0, NULL, 0)
"SELECT * FROM result
row
Получение информации о
lengths field
i |
i++) |
Value:
Эта функция возвращает массив, в котором указана размерность каждого столбца текущей
* *res)
Функция предпочтительнее, чем так как по следняя неправильно определяет длину двоичной строки. В случае ошибки, вызван ной наличием неправильного указателя, возвращается NULL.
Пример использования данной функции приводился в листинге 15.7.
Эта функция извлекает следующую запись из указанного набора:
*res)
При достижении конца набора в режиме буферизованного чтения возвращается NULL. В небуферизованном режиме значение NULL является как признаком конца на
346 Глава Библиотека функций языка С
бора, так и признаком ошибки. В этом случае необходимо проверить наличие ошибки с помощью функции mysql_errno
Возвращаемое значение можно трактовать как массив значений столбцов. Их чис
ло определяет функция |
а функция |
находит длину каждого столбца. |
|
В листинге 15.8 запрашиваются значения трех столбцов таблицы user. Обратите внимание на функцию во внутреннем цикле. В ней проверяется реальная длина каждого столбца. С помощью оператора значения NULL преобразуются в строку "NULL". Указатель, содержащийся в массиве row, будет равен NULL, если зна чение в столбце отсутствует. Если же столбец соде ржит пустую строку, в массиве row будет находиться указатель на пустую строку.
#include <string.h>
char
MYSQL mysql;
row; MYSQL_FIELD unsigned int unsigned long unsigned int i;
char
"root", "mysql", 0, NULL,
"SELECT Host, User, Password FROM result
Просмотр
lengths
i |
i++) |
|
(int) |
row[i] |
row[i] |
Клиентские функции 347
mysql_field_count()
Эта функция определяет количество столбцов, участвовавших в последней опера ции заданного сеанса:
unsigned *mysql)
Схожие действия выполняет функция которая в качестве аргумента принимает указатель на конкретную таблицу результатов.
mysql_field_seek()
Эта функция перемещает внутренний указатель на заданный столбец таблицы ре зультатов:
MYSQL_RES
MYSQL_FIELD_OFFSET
Первый столбец имеет нулевое смещение. Функция возвращает предыдущее зна чение указателя.
mysql_field_tell()
Эта функция возвращает значение внутреннего указателя полей:
*res)
mysql_free_result()
Эта функция освобождает память, занимаемую таблицей результатов запроса:
void *result)
По окончании работы с набором записей необходимо всегда освобождать память.
Эта функция определяет версию клиентской библиотеки, с которой ведется работа:
char *
Пример использования данной функции был приведен в листинге 15.3.
Эта функция возвращает строку, описывающую узел, с которым установлено единение:
char *
Пример использования данной функции был приведен в листинге 15.3.
348 Глава Библиотека ф ункций языка С
Эта функция определяет версию применяемого коммуникационного протокола:
Пример использования данной функции был приведен в листинге 15.3.
Эта функция определяет версию программы MySQL, установленной на сервере:
char * *mysql)
Пример использования данной функции был приведен в листинге 15.3.
Эта функция возвращает строку с описанием записей, измененных в ходе послед него запроса:
char *mysql)
Непустая строка возвращается лишь в том случае, в операции вставки (INSERT) или обновления (UPDATE) участвовала более чем одна запись. Например, если с помощью инструкции INSERT INTO в таблицу была добавлена одна запись, функция о вернет пустую строку. Непустая строка возвращается также в случае выполнения инструкций ALTER TABLE и LOAD DATA
mysql_init()
Эта функция инициализирует соединение:
MYSQL *
В качестве аргумента можно передать адрес существующей структуры MYSQL или NULL. Во втором случае функция выделит память под новую структуру. Для дения выделенной памяти предназначена
Эта функция возвращает последнее значение поля счетчика, использовавшееся в указанном сеансе:
Toжесамое значениевозвращается встроенной LAST_I NSERT_ID Если в последнем запросе не участвовало функция возвращает нуль.
Клиентские функции 349
mysql_kill()
Эта функция уничтожает поток, связанный с базой данных:
*mysql,
Список идентификаторов потоков можно получить с помощью инструкции SHOW PROCESSES или функции В случае неудачи функция mysql_kill возвращает нуль.
mysql_list_dbs()
Эта функция возвращает набор записей с именами всех баз данных:
* *mysql, const char *wild)
Аргумент wild может содержать неполное имя с метасимволами и что зволяет фильтровать результаты. Аналогичные действия выполняет инструкция SHOW DATABASES. He забывайте, что полученный набор записей необходимо удалить с по мощью функции ree_result
В листинге 159. выводится список баз данных, доступных пользователю root.
<string.h>
int |
char |
MYSQL mysql;
MYSQL_RES MYSQL_ROW row; MYSQL_FIELD unsigned long
"root", "mysql", 0, NULL,
result
Просмотр результатов.
while(row
lengths (int)
350 Глава Библиотека функций языка С
Эта функция возвращает набор записей с именами всех столбцов в указанной таб лице:
MYSQL_RES * MYSQL
const char *table, const char *wild)
Аргумент wild может содержать неполное имя с метасимволами и что по зволяет фильтровать результаты. Аналогичные действия выполняет инструкция SHOW COLUMNS. He забывайте, что полученный набор записей необходимо удалить с помо щью функции ree_result
Эта функция возвращает набор записей с идентификаторами всех потоков:
* *mysql)
Аналогичные действия выполняет инструкция SHOW Не забывайте, что полученный набор записей необходимо удалить с помощью функции mysql_
mysql_list_tables()
Эта функция возвращает набор записей с именами всех таблиц указанной базы данных:
MYSQL_RES * const char *wild)
Аргумент wild может содержать неполное имя с метасимволами и что по зволяет фильтровать результаты. Аналогичные действия выполняет инструкция SHOW TABLES. He забывайте, что полученный набор записей необходимо удалить с
щью функции ree_result
Эта функция определяет количество полей в указанном наборе записей:
unsigned |
*res) |
Эта функция определяет количество записей в указанном наборе:
*res)
Клиентские функции 351
mysql_options()
Эта функция задает параметры соединения до |
как оно будет установлено: |
||
MYSQL |
option, |
|
|
|
|
|
|
const char |
*arg) |
|
|
Функция |
должна вызываться после |
но до |
|
|
Она вызывается по одному разу для каждого параметра |
||
(табл. 15.6). В случае параметра |
|
функции необходимо |
передать указатель на беззнаковое целое число, приведенный к типу char
Константа |
Тип аргумента |
Директива |
|
|
|
char |
* |
Немедленно выполнить ука |
|
|
|
|
заннуюSQL инструкциюпри |
|
|
|
|
первом или повторном под |
|
|
|
|
ключении |
|
MYSQL_OPT_COMPRESS |
Heиспользуется |
Сжимать данные, переда |
||
|
|
|
ваемые между клиентом и |
|
|
|
|
сервером |
|
MYSQL_OPT_CONNECT_TIMEOUT |
unsigned int * |
Считать попытку |
||
|
|
|
чения неудачной по |
|
|
|
|
нииуказанногочисласекунд |
|
MYSQL_OPT_NAMED_PIPE |
He используется |
Использовать |
именован |
|
|
|
|
ные каналы в Windows NT |
|
MYSQL_READ_DEFAULT_FILE |
char |
* |
Прочитать установки из ука |
|
|
|
|
занного |
|
|
|
|
гофайла,а не того, который |
|
|
|
|
задан по умолчанию (напри |
|
|
|
|
мер, |
|
|
char |
* |
Прочитать установки из ука |
|
|
|
|
занной группы |
конфигура |
|
|
|
ционного файла |
|
Благодаря функции разработчики MySQL могут добавлять к программе новые параметры соединений, не модифицируя код функции real_connect Пример задания параметров приведен в листинге