}
conn_ptr = mysql_real_connect(conn_ptr, "localhost", "rick", "secret",
"foo", 0, NULL, 0);
if (conn_ptr) {
printf("Connection success\n");
} else {
printf ("Connection failed\n");
}
mysql_close(conn_ptr);
return EXIT_SUCCESS;
}
Теперь откомпилируйте программу и посмотрите, как вы это сделали. Возможно, придется вставить путь к файлам includeи путь к библиотекам, а также указать, что файл нуждается в компоновке с библиотечным модулем mysqlclient. В некоторых системах может понадобиться опция -lzдля компоновки с библиотекой упаковки (compression library). В системе авторов требуемая строка компиляции выглядит следующим образом:
$ gcc -I/usr/include/mysql connect1.с -L/usr/lib/mysql -lmysqlclient -о connect1
Вам, возможно, придется проверить, установлены ли пакеты клиентской части и место их установки, зависящее от применяемого вами дистрибутива, и откорректировать, соответственно, приведенную строку компиляции.
Когда вы запустите программу, должно появиться сообщение об успешном подключении:
$ ./connect1
Connection success $
В главе 9 мы покажем, как создать make-файл и автоматизировать процесс подключения.
Как видите, подключиться к базе данных MySQL очень легко.
Прежде чем мы перейдем к более сложным программам, полезно взглянуть на то, как MySQL обрабатывает ошибки. СУРБД MySQL использует ряд возвращаемых числовых кодов, предоставляемых дескриптором подключения. К двум обязательным подпрограммам относятся следующие:
unsigned int mysql_errno(MYSQL *connection);
и
char *mysql_error(MYSQL *connection);
Вы можете получить код ошибки, обычно любое ненулевое значение, вызвав подпрограмму mysql_errnoи передав ей дескриптор подключения. Если никакой код ошибки не установлен, возвращается ноль. Поскольку код обновляется при каждом вызове библиотечной функции, можно извлечь код только последней выполненной команды, за исключением двух подпрограмм обработки ошибок, которые не приводят к обновлению кода ошибки.
Возвращаемое значение — в действительности код ошибки, коды ошибок определены в файле includeс именем errmsg.h или в файле mysqld_error.h. Оба файла можно найти в каталоге MySQL с именем include. Первый сообщает об ошибках клиентской стороны, а второй — об ошибках сервера.
Если вы предпочитаете текстовое сообщение об ошибке, можно вызвать подпрограмму mysql_error, которая вместо кода предоставляет осмысленное текстовое сообщение. Текст сообщения пишется в некоторую внутреннюю область статической памяти, поэтому для сохранения текста ошибки его следует скопировать куда- нибудь.
Вы можете вставить элементарную обработку ошибок в вашу программу для того, чтобы увидеть все это в действии. Возможно, вы уже заметили, что можно столкнуться с проблемой, поскольку подпрограмма mysql_real_connectв случае сбоя возвращает указатель NULL, лишая вас кода ошибки. Если дескриптор подключения сделать переменной, его все же можно получить при аварийном завершении mysql_real_connect.
Далее приведен файл connect2.c, демонстрирующий, как применять структуру дескриптора подключения без динамического выделения памяти для нее, а также как написать некоторый базовый программный код обработки ошибок. Внесенные изменения выделены цветом.
#include
#include
#include "mysql.h"
int main(int argc, char *argv[]) {
MYSQL my_connection;
mysql_init(&my_connection);
if (mysql_real_connect(&my_connection, "localhost", "rick",
"I do not know", "foo", 0, NULL, 0)) {
printf("Connection success\n");
mysql_close(&my_connection);
} else {
fprintf(stderr, "Connection failed\n");
if (mysql_errno(&my_connection)) {
fprintf(stderr, "Connection error %d: %s\n",
mysql_errno(&my_connection), mysql_error(&my_connection));
}
}
return EXIT_SUCCESS;
}
Вы смогли легко решить проблему, устранив перезапись вашего дескриптора подключения результатом, возвращаемым при аварийном завершении mysql_real_connect. И кроме того, это отличный пример еще одного способа применения структур дескрипторов подключения. Вы можете вызвать ошибку, выбрав некорректное имя пользователя или пароль, и получите код ошибки, подобный предлагаемому монитором mysql:
$ ./connect2
Connection failed
Connection error 1045: Access denied for user: 'rick@localhost' (Using password: YES)
$
Выполнение SQL-операторов
Теперь, когда вы можете подключаться к вашей базе данных и корректно обрабатывать ошибки, самое время дать вашей программе реальную работу. У основной функции API, предназначенной для выполнения операторов языка SQL, подходящее имя.
Читать дальше