Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Когда вы запустите программу, должно появиться сообщение об успешном подключении:
$ <b>./connect1</b>
Connection success $
В главе 9 мы покажем, как создать make-файл и автоматизировать процесс подключения.
Как видите, подключиться к базе данных MySQL очень легко.
Обработка ошибок
Прежде чем мы перейдем к более сложным программам, полезно взглянуть на то, как MySQL обрабатывает ошибки. СУРБД MySQL использует ряд возвращаемых числовых кодов, предоставляемых дескриптором подключения. К двум обязательным подпрограммам относятся следующие:
<b>unsigned int mysql_errno(MYSQL *connection);</b>
и
<b>char *mysql_error(MYSQL *connection);</b>
Вы можете получить код ошибки, обычно любое ненулевое значение, вызвав подпрограмму
mysql_errno
Возвращаемое значение — в действительности код ошибки, коды ошибок определены в файле
include
Если вы предпочитаете текстовое сообщение об ошибке, можно вызвать подпрограмму
mysql_error
Вы можете вставить элементарную обработку ошибок в вашу программу для того, чтобы увидеть все это в действии. Возможно, вы уже заметили, что можно столкнуться с проблемой, поскольку подпрограмма
mysql_real_connect
NULL
mysql_real_connect
Далее приведен файл connect2.c, демонстрирующий, как применять структуру дескриптора подключения без динамического выделения памяти для нее, а также как написать некоторый базовый программный код обработки ошибок. Внесенные изменения выделены цветом.
#include <stdlib.h>
#include <stdio.h>
#include "mysql.h"
int main(int argc, char *argv[]) {
<i> MYSQL my_connection;</i>
<i> mysql_init(&my_connection);</i>
<i> if (mysql_real_connect(&my_connection, "localhost", "rick",</i>
<i> "I do not know", "foo", 0, NULL, 0)) {</i>
printf("Connection successn");
mysql_close(&my_connection);
} else {
fprintf(stderr, "Connection failedn");
<i> if (mysql_errno(&my_connection)) {</i>
<i> fprintf(stderr, "Connection error %d: %sn",</i>
<i> mysql_errno(&my_connection), mysql_error(&my_connection));</i>
<i> }</i>
}
return EXIT_SUCCESS;
}
Вы смогли легко решить проблему, устранив перезапись вашего дескриптора подключения результатом, возвращаемым при аварийном завершении
mysql_real_connect
mysql
$ <b>./connect2</b>
Connection failed
Connection error 1045: Access denied for user: '[email protected]' (Using password: YES)
$
Выполнение SQL-операторов
Теперь, когда вы можете подключаться к вашей базе данных и корректно обрабатывать ошибки, самое время дать вашей программе реальную работу. У основной функции API, предназначенной для выполнения операторов языка SQL, подходящее имя.
<b>int mysql_query(MYSQL *connection, const char *query);</b>
He слишком сложная? Эта подпрограмма принимает указатель на дескриптор подключения и несколько, хочется надеяться, корректных SQL-операторов в виде текстовой строки (без завершения каждого из них точкой с запятой, как в мониторе
mysql
mysql_real_query
mysql_query
Для простоты начнем с рассмотрения нескольких SQL-операторов, которые не возвращают данные:
UPDATE
DELETE
INSERT
Еще одна важная функция, которую мы рассмотрим, проверяет количество строк, затронутых запросом:
<b>my_ulonglong mysql_affected_rows(MYSQL *connection);</b>
Первое, что вы, вероятно, заметили в этой функции, — очень необычный тип возвращаемых данных. Из соображений переносимости применяется беззнаковый (unsigned) тип. Когда используется функция
printf
unsigned long
%lu
UPDATE
INSERT
DELETE
WHERE