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

2. Извлечение данных.

3. Обработка этих данных.

4. Наведение порядка при необходимости.

Так же, как в случае операторов INSERT и DELETE, вы воспользуетесь функцией mysql_query для отправки SQL-запроса. Далее вы извлечете данные о помощью функций mysql_store_result или mysql_use_result в зависимости от того, как хотите получить данные. Затем будет применена последовательность вызовов функции mysql_fetch_row для обработки данных. И наконец, вы используете функцию mysql_free_result для очистки памяти, которая применялась для выполнения вашего запроса.

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

Функции для извлечения всех данных сразу

Вы сможете извлечь в единственном вызове все данные из оператора SELECT (или другого оператора, возвращающего данные), применяя функцию mysql_store_result:

MYSQL_RES *mysql_store_result(MYSQL* connection);

Ясно, что вам понадобится эта функция после успешного вызова функции mysql_query. Она немедленно сохранит все возвращенные данные в клиентской части. Функция вернет указатель на новую структуру, называемую структурой результирующего набора, или NULL, если оператор завершился аварийно.

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

my_ulonglong mysql_num_rows(MYSQL_RES* result);

Эта функция принимает в качестве параметра структуру с результатом, возвращенную mysql_store_result, и возвращает количество строк в данном результирующем наборе. Если функция mysql_store_result завершилась успешно, функция mysql_num_rows также завершится успешно.

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

Если окажется, что вы должны работать с особенно большим набором данных, лучше извлекать меньшие по объему, более управляемые порции данных. В этом случае приложению быстрее передается управление, и использование сетевых ресурсов будет более щадящим. Мы рассмотрим этот вариант подробнее при обсуждении функции mysql_use_result.

Теперь, когда у вас есть данные, можно обработать их с помощью функции mysql_fetch_row и перемещаться по набору, используя функции mysql_data_seek, mysql_row_seek и mysql_row_tell. Давайте рассмотрим их.

 Функция mysql_fetch_row извлекает одну строку из структуры типа result, которую вы получили с помощью функции mysql_store_result, и помещает ее структуру row. Когда данные иссякли или возникла ошибка, возвращается NULL. В следующем разделе мы вернемся к обработке данных в структуре типа row.

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

 Функция mysql_data_seek позволяет перемещаться в результирующем наборе, задавая строку, которая будет возвращена при следующем вызове функции mysql_fetch_row. Значение offset — номер строки в диапазоне от нуля до общего количества строк в результирующем наборе, уменьшенного на единицу. Передача нулевого значения вызовет возврат первой строки при следующем вызове функции mysql_fetch_row.

void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);

 Функция mysql_row_tell возвращает величину смещения, обозначая текущую позицию в результирующем наборе. Это не номер строки и его нельзя использовать в функции mysql_data_seek.

MSSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);

Но ее можно применять с функцией

MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result,

 MYSQL_ROW_OFFSET offset);

которая перемещает текущую позицию в результирующем наборе и возвращает предыдущую позицию.

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

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

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT