2. Вставьте ее в конец файла select2.c и добавьте объявление и вызов функции:
int main(int argc, char *argv[]) {
int res;
mysql_init(&my_connection);
if (mysql_real_connect(&my_connection, "localhost", "rick",
"bar", "rick", 0, NULL, 0)) {
printf("Connection success\n");
res = mysql_query(&my_connection,
"SELECT childno, fname, age FROM children WHERE age > 5");
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");
display_row;
}
}
}
}
}
3. Теперь сохраните законченный проект с именем select3.c. В заключение откомпилируйте и выполните select3, как показано далее:
$ gcc -I/usr/include/mysql select3. с -L/usr/lib/mysql -lmysqlclient -о select3
$ ./select3
Connection success
Fetched data...
1 Jenny 21
Fetched data...
2 Andrew 17
$
Итак, программа работает, несмотря на не слишком эстетически привлекательный вывод. Но вы не смогли учесть в результате возможные значения NULL
. Если вы хотите вывести более искусно отформатированные (в виде таблицы, например) данные, следует получить из MySQL данные и метаданные. Одновременно считать как данные, так и метаданные в новую структуру вы можете с помощью функции mysql_fetch_field
.
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
Вызывать эту функцию следует многократно, до тех пор, пока не будет возвращено значение NULL
, которое сигнализирует о том, что данные закончились. Далее вы можете использовать указатель на структуру данных о поле для получения сведений о столбце. Структура типа MYSQL_FIELD
определена в файле mysql.h, как показано в табл. 8.12.
Поле в структуре типа MYSQL_FIELD | Описание |
---|---|
char *name; | Имя столбца в виде строки |
char *table; | Имя таблицы, из которой получен столбец. Оно особенно полезно в запросе с использованием нескольких таблиц. Имейте в виду, что вычисляемое значение в результате, такое как MAX , будет иметь пустую строку для имени таблицы |
char *def; | При вызове функции mysql_list_fields (которую мы не обсуждаем) это поле содержит значение в столбце по умолчанию |
enum enum_field_types type; | Тип столбца. См. пояснения сразу после таблицы |
unsigned int length; | Ширина столбца, заданная при определении таблицы |
unsigned int max_length; | Если применяется функция mysql_store_result , это поле содержит длину в байтах самого длинного извлеченного значения столбца. Если применяется функция mysql_use_result , поле не задается |
unsigned int flags; | Флаги содержат информацию об определении столбца, а не о найденных данных. у распространенных флагов очевидные значения: NOT_NULL_FLAG , PRI_KEY_FLAG , UNSIGNED_FLAG , AUTO_INCREMENT_FLAG и BINARY_FLAG . Полный список флагов можно найти в документации MySQL |
unsigned int decimals; | Количество знаков после десятичной точки. Справедливо только для числовых полей |