Не совсем понятно, что в конце предыдущей командной строки делает параметр -lz? Причина в том, что новые версии клиентской библиотеки MySQL включают поддержку протокола сжатия для уменьшения объема данных, передаваемых между клиентом и сервером. Эта возможность реализована с помощью библиотеки libz, а значит, если вы не зададите связь с ней (с помощью параметра - lz), редактор связей выдаст последовательность сообщений об ошибке и завершит процесс компиляции.

После завершения компиляции получим двоичный файл sample.bin. Этот файл можно запускать прямо из командной строки. И, если все прошло хорошо, он должен подключиться к серверу MySQL, выполнить запрос и вывести полученный результат, как в следующем примере.
Листинг 19.4.
[user@host]$ ./sample.bin
Mystic River - Dennis Lehane 
The Memoirs Of Sherlock Holmes - Arthur Conan Doyle
Hannibal - Thomas Harris
The Dilbert Principle - Scott Adams
Life Of Pi - Yann Martel
The Lake House - James Patterson
Bleachers - John Grisham
Mortal Prey - John Sandford
Проанализируем этот код, чтобы лучше понять, каким образом можно использовать C API-интерфейс MySQL для подключения C-программ к базам данных MySQL и выборки данных из них.
1. Программа начинается, как обычно: сначала объявляются все файлы заголовков, которые ей необходимы. Поскольку в нашей программе будут использоваться структуры, присущие MySQL, включим в этот список файл заголовка mysql.h.
#include <stdio.h> #include <mysql.h>
2. После этого задается функция main() и инициализируются некоторые переменные и структуры, которые мы будем использовать на следующих шагах:
/* объявление структур и переменных */ MYSQL mysql; MYSQL_RES *result;
MYSQL_ROW row;
Каждая из этих структур играет специфическую роль в блок-схеме клиентского приложения MySQL. Первая из них - MYSQL - является наиболее важной, т.к. она служит точкой отсчета для любого взаимодействия с сервером. Возвращенный сервером результирующий набор хранится в специальной структуре результирующего набора MYSQL_RES, а выбранные из этой структуры записи будут представлены в структуре MYSQL_ROW.
3. Для того чтобы подключиться к серверу базы данных MySQL, сначала необходимо инициализировать структуру MYSQL. Для этих целей служит функция mysql_init():
mysql_init(&mysql);
После этого с помощью функции mysql_real_connect() можно открыть со­единение с сервером:
mysql_real_connect(&mysql, "localhost", "john", "doe", "db1", 0, NULL, 0);
Этой функции требуется несколько различных аргументов: имя узла, на котором работает сервер MySQL ("localhost"), имя базы данных, к которой производится соединение ("db1"), имя пользователя MySQL ("john") и его пароль ("doe"). Если соединение происходит успешно, эта функция возвращает дескриптор соединения с базой данных, который будет использоваться в дальнейшем для подключения к базе данных.
В разделе "Управление соединением" это обсуждается подробнее.
4. После установления соединения с сервером, для передачи запроса на сервер ис­пользуется функция mysql_query() :
mysql_query(&mysql,"SELECT title, author FROM books"); 
Это может быть любой допустимый SQL-запрос, который принимается сервером MySQL. Заметим, что строка запроса, отправляемого на сервер не должна содержать в конце точку с запятой "; " или "g". В разделе "Выполнение запроса" команда mysql_query() будет рассмотрена детальнее, в том числе ее использование с запросами типа "SELECT" и другими.
5. После выполнения запроса генерируется результирующий набор (конечно, если запросом является запрос SELECT), который каким-то образом присваивается переменной (обычно это указатель на структуру MYSQL_RES) и который можно получить с помощью функции mysql_store_result():. result = mysql_store_result(&mysql);
Теперь записи, имеющиеся в результирующем наборе, можно получить с помощью функции mysql_fetch_row() , которая считывает по одной записи за один раз в структуру MYSQL_ROW. Эта структура является не чем иным, как массивом, каждый элемент которого является полем записи. Поэтому доступ к ней можно получить, просмотрев записи массива: while((row= mysql_fetch_row(result))) {
fprintf(stdout, "%s - %sn", row[0], row[1]);
После того как все записи в результирующем наборе выбраны, функция mysql_fetch_row() возвращает значение NULL. После этого функция mysql_free_result() освобождает память от результирующего набора, а функция mysql_close() закрывает соединение с базой данных:
mysql_free_result(result); mysql_close(&mysql);
Опытные программисты, конечно же, сразу заметят, что этот пример исходного текста не содержит проверки на ошибки. Такая проверка была пропущена преднамеренно для простоты рассуждений, но не беспокойтесь - этот вопрос обязательно будет рассмотрен по мере нашего повествования.
Кроме того, следует заметить, что этот пример программного кода работает только с уже существующими базами данных и соответствующими таблицами. SQL-код, необходимый для создания этих таблиц (вместе с электронными копиями исходного текста из этой и следующих глав), можно найти на Web-узле http://www.mysql-tcr.com.
Итак, представленные пять этапов составляют основу процесса создания информационных приложений с использованием MySQL C API. В следующих разделах эти шаги мы рассмотрим более подробно.