Читаем Основы программирования в Linux полностью

В чем же выигрыш от вызова функции mysql_use_result по сравнению с вызовом функции mysql_store_result? У первой из названных функций есть ряд существенных преимуществ, касающихся управления ресурсами; но ее нельзя применять с функциями mysql_data_seek, mysql_row_seek или mysql_row_tell и польза от применения mysql_num_rows ограничена, поскольку она не может нормально функционировать до тех пор, пока не будут извлечены все данные.

Вы также увеличьте время ожидания в вашей программе, т.к. запрос каждой строки должен пройти по сети и также должны быть отправлены обратно результаты. Еще одна возможность — разрыв сетевого соединения в середине операции, оставляющий вас с неполным набором данных.

Но ни один из перечисленных недостатков никак не уменьшает достоинств, упомянутых ранее: лучше сбалансированная сетевая загрузка и меньшие непроизводительные потери памяти в случае возможных очень больших наборов данных.

Замена программы select1.c на программу select2.c, использующую метод mysql_use_result, проста, поэтому далее мы приводим измененный фрагмент в виде закрашенных серым цветом строк:

if (res) {

 printf("SELECT error: %s\n", mysql_error(&my_connection));

} else {

 res_ptr = mysql_use_result(&my_connection);

 if (res_ptr) {

  while ((sqlrow = mysql_fetch_row(res_ptr))) {

   printf("Fetched data...\n");

  }

  if (mysql_errno(&my_connection)) {

   printf("Retrieve error: %s\n", mysql_error(&my_connection));

  }

  mysql_free_result(res_ptr);

 }

}

Учтите, что вы не можете получить количество строк до тех пор, пока не будет извлечен последний результат. Но проверяя ошибки как можно раньше и чаще, вы облегчите применение функции mysql_use_result. Разрабатывая программу таким образом, можно уберечься от головной боли при последующих ее модификациях.

Обработка полученных данных

Зная, как извлекать строки, можно перейти к рассмотрению обработки полученных реальных данных.

MySQL, как большинство баз данных SQL, возвращает два вида данных:

□ данные, извлеченные из таблицы и называемые данными столбцов;

□ данные о данных, так называемые метаданные, например, имена столбцов и их типы.

Сначала сосредоточимся на получении данных, как таковых, в пригодном к использованию виде.

Функция mysql_field_count предоставляет некоторую базовую информацию о результате запроса. Она принимает ваше подключение как объект и возвращает количество полей (столбцов) в результирующем наборе.

unsigned int mysql_field_count(MYSQL * connection);

Помимо этого вы можете использовать mysql_field_count и в других случаях, таких как определение причины аварийного завершения вызова функции mysql_store_result. Если mysql_store_result возвращает NULL, а функция mysql_field_count — положительное число, можно предположить ошибку извлечения. Если же функция mysql_field_count возвращает 0, нет извлекаемых столбцов, что объясняет сбой при попытке сохранить результат. Естественно ожидать, что вы знаете, сколько предполагаемых столбцов должно быть получено в конкретном запросе. Таким образом, эта функция особенно полезна в компонентах общей обработки запросов и в любой ситуации, когда запросы формируются на лету.

Примечание

В программах, написанных для более ранних версий MySQL, вы можете встретить функцию mysql_num_fields. Она может принимать в качестве параметра указатель на структуру дескриптора подключения или структуру результата запроса и возвращает количество столбцов.

Если оставить в стороне заботы о форматировании, вы уже знаете, как немедленно вывести данные. Добавьте простую функцию display_row в программу select2.c.

Примечание

Обратите внимание на то, что для упрощения примера данные о подключении, результате и строке, полученные из функции mysql_fetch_row, все сделаны глобальными. В рабочей программе мы не рекомендуем делать это.

1. Далее приведена очень простая подпрограмма для вывода данных:

void display_row() {

 unsigned int field_count;

 field_count = 0;

Перейти на страницу:

Похожие книги

Сетевые средства Linux
Сетевые средства Linux

В этой книге описаны принципы действия и область применения многих серверов, выполняющихся в системе Linux. Здесь рассматриваются DHCP-сервер, серверы Samba и NFS, серверы печати, NTP-сервер, средства удаленной регистрации и система X Window. He забыты и средства, традиционно используемые для обеспечения работы Internet-служб: серверы DNS, SMTP, HTTP и FTP. Большое внимание уделено вопросам безопасности сети. В данной книге нашли отражения также средства удаленного администрирования — инструменты Linuxconf, Webmin и SWAT.Данная книга несомненно окажется полезной как начинающим, так и опытным системным администраторам.Отзывы о книге Сетевые средства LinuxПоявилась прекрасная книга по Linux, осталось воспользоваться ею. Не упустите свой шанс.Александр Стенцин, Help Net Security. Если вы стремитесь в полной мере использовать сетевые возможности Linux — эта книга для вас. Я настоятельно рекомендую прочитать ее.Майкл Дж. Джордан, Linux OnlineВыхода подобной книги давно ожидали читатели. Менее чем на 700 страницах автор смог изложить суть самых различных вопросов, связанных с работой Linux. Автор является высококвалифицированным специалистом в своей области и щедро делится своими знаниями с читателями.Роджер Бертон, West, DiverseBooks.com

Родерик В. Смит

ОС и Сети / Книги по IT
Сетевые средства Linux
Сетевые средства Linux

В этой книге описаны принципы действия и область применения многих серверов, выполняющихся в системе Linux. Здесь рассматриваются DHCP-сервер, серверы Samba и NFS, серверы печати, NTP-сервер, средства удаленной регистрации и система X Window. He забыты и средства, традиционно используемые для обеспечения работы Internet-служб: серверы DNS, SMTP, HTTP и FTP. Большое внимание уделено вопросам безопасности сети. В данной книге нашли отражения также средства удаленного администрирования — инструменты Linuxconf, Webmin и SWAT.Данная книга несомненно окажется полезной как начинающим, так и опытным системным администраторам.Отзывы о книге Сетевые средства LinuxПоявилась прекрасная книга по Linux, осталось воспользоваться ею. Не упустите свой шанс.Александр Стенцин, Help Net Security. Если вы стремитесь в полной мере использовать сетевые возможности Linux — эта книга для вас. Я настоятельно рекомендую прочитать ее.Майкл Дж. Джордан, Linux OnlineВыхода подобной книги давно ожидали читатели. Менее чем на 700 страницах автор смог изложить суть самых различных вопросов, связанных с работой Linux. Автор является высококвалифицированным специалистом в своей области и щедро делится своими знаниями с читателями.Роджер Бертон, West, DiverseBooks.com

Родерик В. Смит

ОС и Сети, интернет / ОС и Сети / Книги по IT
Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Питер Нортон , Джон Поль Мюллер

ОС и Сети / Книги по IT