Вы можете получить код ошибки, обычно любое ненулевое значение, вызвав подпрограмму mysql_errno
Возвращаемое значение — в действительности код ошибки, коды ошибок определены в файле include
Если вы предпочитаете текстовое сообщение об ошибке, можно вызвать подпрограмму mysql_error
Вы можете вставить элементарную обработку ошибок в вашу программу для того, чтобы увидеть все это в действии. Возможно, вы уже заметили, что можно столкнуться с проблемой, поскольку подпрограмма mysql_real_connect
NULL, лишая вас кода ошибки. Если дескриптор подключения сделать переменной, его все же можно получить при аварийном завершении mysql_real_connect.Далее приведен файл connect2.c, демонстрирующий, как применять структуру дескриптора подключения без динамического выделения памяти для нее, а также как написать некоторый базовый программный код обработки ошибок. Внесенные изменения выделены цветом.
#include
#include
#include "mysql.h"
int main(int argc, char *argv[]) {
printf("Connection success\n");
mysql_close(&my_connection);
} else {
fprintf(stderr, "Connection failed\n");
}
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, подходящее имя.
int mysql_query(MYSQL *connection, const char *query);
He слишком сложная? Эта подпрограмма принимает указатель на дескриптор подключения и несколько, хочется надеяться, корректных SQL-операторов в виде текстовой строки (без завершения каждого из них точкой с запятой, как в мониторе mysql
mysql_real_query можно применять при запросе двоичных данных, но в этой главе мы используем только подпрограмму mysql_query.Для простоты начнем с рассмотрения нескольких SQL-операторов, которые не возвращают данные: UPDATE
DELETE и INSERT.Еще одна важная функция, которую мы рассмотрим, проверяет количество строк, затронутых запросом:
my_ulonglong mysql_affected_rows(MYSQL *connection);