Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
fprintf(stderr, "Insert error %d: %sn",
mysql_errno(&myconnection), mysql_error(&my_connection));
}
<i> res = mysql_query(&my_connection, "SELECT LAST INSERT ID()");</i>
<i> if (res) {</i>
<i> printf("SELECT error %sn", mysql_error(&my_connection);</i>
<i> } else {</i>
<i> res_ptr= mysql_use_result(&my_connection);</i>
<i> if (res_ptr) {</i>
<i> while ((sqlrow = mysql_fetch_row(res_ptr))) {</i>
<i> printf("We inserted childno %sn", sqlrow[0]);</i>
<i> }</i>
<i> mysql_free_result(res_ptr);</i>
<i> }</i>
<i> }</i>
mysql_close(&my_connection);
} else {
fprintf(stderr, "Connection failedn");
if (mysql_errno(&my_connection)) {
fprintf(stderr, "Connection error %d: %sn",
mysql_errno(&my_connection), mysql_error(&my_connection));
}
}
return EXIT_SUCCESS;
}
Далее приведен вывод:
$ <b>gcc -I/usr/include/mysql insert2.c -L/usr/lib/mysql -lmysqlclient -o insert2</b>
$ <b>./insert2</b>
Connection success
Inserted 1 rows
We inserted childno 6
$ <b>./insert2</b>
Connection success
Inserted 1 rows
We inserted childno 7
Как это работает
После вставки строки вы извлекаете выделенный ID, применив функцию
LAST_INSERT_ID()
SELECT
mysql_use_result()
SELECT
Основное назначение языка — конечно, извлечение данных, а не их добавление или обновление. Данные извлекаются с помощью оператора
SELECT
MySQL также поддерживает SQL-операторы
SHOW
DESCRIBE
EXPLAIN
Получение данных в вашем приложении на языке С обычно будет включать четыре шага:
1. Выполнение запроса.
2. Извлечение данных.
3. Обработка этих данных.
4. Наведение порядка при необходимости.
Так же, как в случае операторов
INSERT
DELETE
mysql_query
mysql_store_result
mysql_use_result
mysql_fetch_row
mysql_free_result
Разница между функциями
mysql_use_result
mysql_store_result
Вы сможете извлечь в единственном вызове все данные из оператора
SELECT
mysql_store_result
<b>MYSQL_RES *mysql_store_result(MYSQL* connection);</b>
Ясно, что вам понадобится эта функция после успешного вызова функции
mysql_query
NULL
В случае успеха вы далее вызываете функцию
mysql_num_rows
<b>my_ulonglong mysql_num_rows(MYSQL_RES* result);</b>
Эта функция принимает в качестве параметра структуру с результатом, возвращенную
mysql_store_result
mysql_store_result
mysql_num_rows
Данная комбинация функций — легкий способ извлечь нужные вам данные. На этом этапе все данные локальны для программы-клиента и вам не нужно больше поддерживать подключение, связанное с возможностью возникновения ошибок в сети или базе данных. Получив количество возвращенных строк, вы упростите последующий программный код.
Если окажется, что вы должны работать с особенно большим набором данных, лучше извлекать меньшие по объему, более управляемые порции данных. В этом случае приложению быстрее передается управление, и использование сетевых ресурсов будет более щадящим. Мы рассмотрим этот вариант подробнее при обсуждении функции
mysql_use_result
Теперь, когда у вас есть данные, можно обработать их с помощью функции
mysql_fetch_row
mysql_data_seek
mysql_row_seek
mysql_row_tell