Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к MySQL из С, не получается, может кто пробывал 
:(
    Опции темы
Chuck
Дата 25.1.2005, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



Привет, не могу скомпилить прогу, которая коннектится к MySQL серваку!
Код


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <mysql.h>
MYSQL mysql;
MYSQL_RES res;
MYSQL_ROW row;



int main(int argc, char *argv[])
{
if (!(mysql_connect(&mysql, "localhost", "root", "")))
 {
 perror("MySQL connection error!\n");
 exit(1);
 }
mysql_select_db(&mysql, "test");
mysql_query(&mysql, "SHOW TABLES");
while (res = mysql_fetch_array(&mysql))
 {
 printf("%s\n", res);
 }
mysql_free_result(&mysql);
mysql_close(&mysql);
 return 0;
}

компилю так
Код

[root@chuck crawler]# gcc -Wall ./crawler.c -o crawler  -I/usr/include/mysql -L/usr/lib/mysql  -lmysqlclient -lm -lz
In file included from /usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2/include/stdio.h:74,
                from crawler.c:5:
/usr/include/libio.h:1: parse error before '.' token
/usr/include/libio.h:21: stray '`' in program
/usr/include/libio.h:24: stray '`' in program
/usr/include/libio.h:46: stray '`' in program
/usr/include/libio.h:47: stray '`' in program
/usr/include/libio.h:61: stray '`' in program
/usr/include/libio.h:62: stray '`' in program
/usr/include/libio.h:62: stray '`' in program
/usr/include/libio.h:70: stray '`' in program
/usr/include/libio.h:71: stray '`' in program
/usr/include/libio.h:71: stray '`' in program
In file included from /usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2/include/stdio.h:74,
                from crawler.c:5:
/usr/include/libio.h:76:10: #include expects "FILENAME" or <FILENAME>
/usr/include/libio.h:81: stray '`' in program
/usr/include/libio.h:81: syntax error at '#' token
/usr/include/libio.h:81: syntax error at '#' token
/usr/include/libio.h:81: syntax error at '#' token
/usr/include/libio.h:88: stray '`' in program
/usr/include/libio.h:88: stray '`' in program
/usr/include/libio.h:123:10: unterminated comment
/usr/include/libio.h:417: parse error before '...' token
/usr/include/libio.h:419: syntax error at '#' token
/usr/include/libio.h:422: parse error before '...' token
/usr/include/libio.h:451: parse error before '...' token
/usr/include/libio.h:453: syntax error at '#' token
/usr/include/libio.h:456: parse error before '...' token
/usr/include/libio.h:515:256: missing terminating ' character
/usr/include/libio.h:476: confused by earlier errors, bailing out


Что за фигня не понимаю, ошибки идут с каких-то левых файлов, которые я не подгружаю!
В чем может быть причина?
И скиньте кто-нить пример работчего клиента!

Заранее спасибо!
PM MAIL WWW GTalk   Вверх
Chuck
Дата 26.1.2005, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



Всем огромное спасибо, я разобрался!
Были ошибки в самой программе!
PM MAIL WWW GTalk   Вверх
Chuck
Дата 3.2.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



Раз dargaard ссылается на этот топик, выкладываю рабочий вариант
Компилить надо так
Код

gcc -Wall ./mysql.c -o mysql  -I/usr/include/mysql -L/usr/lib/mysql  -lmysqlclient -lm -lz

Код

int i = 0;
if (mysql_connect(&mysql, "localhost", "root", "") == NULL)
 {
 printf("Cannot connect\n");
 }
 
 if (mysql_select_db(&mysql, "afishachuck") == 0)
 {
 printf("Cannot select DB\n");
 }
 
 if (mysql_query(&mysql, "SELECT * FROM parts") == 0)
 {
 printf("Cannot execute query\n");
 }
 
res = mysql_store_result(&mysql);
 i = mysql_num_rows(&res);
printf("Rows: %d\n", i);
mysql_free_result(&res);
 mysql_close(&mysql);

PM MAIL WWW GTalk   Вверх
A...
Дата 4.2.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 5.10.2004
Где: Ереван

Репутация: нет
Всего: 1



Скопировал, с компилил, но на зтои строчке
Код

res = mysql_store_result(&mysql);


выдается ошибка

Цитата
mysqlconnect.c:33: error: incompatible types in assignment


и как зто исправить..?

Спасибо

Это сообщение отредактировал(а) A... - 4.2.2005, 13:08
--------------------
Особое спасибо Русскому языку за предоставленные буквы...
PM MAIL ICQ   Вверх
Chuck
Дата 4.2.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



А ты где нить делаешь такое?
Код
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW *row;


Вот полный исходник smile
Код
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW *row;

int main(int argc, char *argv[])
{
int i = 0;
if (!(mysql_connect(&mysql, "localhost", "root", "")))
 {
 printf("Error connection!\n");
 exit(1);
 }
mysql_select_db(&mysql, "school71");
mysql_query(&mysql, "SELECT * FROM galery");
res = mysql_store_result(&mysql);
 i = mysql_num_rows(res);
printf("Returned %d rows\n", i);
mysql_free_result(res);
mysql_close(&mysql);
return 0;
}


Естественно надо поменять юзера, базу, таблицу smile
PM MAIL WWW GTalk   Вверх
A...
Дата 4.2.2005, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 5.10.2004
Где: Ереван

Репутация: нет
Всего: 1



Конечно я пишу зто...

но все равно дает еррор...
--------------------
Особое спасибо Русскому языку за предоставленные буквы...
PM MAIL ICQ   Вверх
Chuck
Дата 5.2.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



А у тебя установлен пакет mysql-devel***?
И вообще что ты делаешь, все полное описание + ошибку сюда давай

PM MAIL WWW GTalk   Вверх
Ace Wentura
Дата 22.3.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Поправьте меня, если я не прав, но мне кажется, что в коде от Chuck должно быть не
Код

MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW *row;

а
Код

MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;

PM MAIL   Вверх
Chuck
Дата 22.3.2005, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



Мда, ты прав, так в документации!
Однако это не ошибка, и все работает замечательно!

PM MAIL WWW GTalk   Вверх
Kurt
Дата 23.3.2005, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Подтверждаю - код Chuck'а работает и без этого исправления. (потому как row в теле main не участвует)
A..., покажи ошибку.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Chuck
Дата 23.3.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



Ace Wentura
Какая разница обращаешься ты к строке или ссылке на эту строку???
И там, и там будет правильно, НО к ссылке обращаться удобнее и быстрее! smile
PM MAIL WWW GTalk   Вверх
Kurt
Дата 10.4.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Пытаюсь скомпилить HelloWorld-приложение на Си+MySQL под Fedora Core 3.
Раньше уже компилил (на других машинах с другими дистрибутивами), но такого не замечал.
Вобщем, компилю:
Цитата
gcc -Wall ./mysql0.c -o mysql0 -I/usr/include/mysql/ -L/usr/lib/mysql/ -lmysqlclient -lm -lz


а в ответ:
Цитата
/usr/include/mysql/mysql.h:127: error: `MEM_ROOT' does not name a type
/usr/include/mysql/mysql.h:168: error: `MEM_ROOT' does not name a type
/usr/include/mysql/mysql.h:184: error: `MEM_ROOT' does not name a type

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

З.Ы.
mysql-devel-3.23.58-13
mysql-3.23.58-13
mysql-server-3.23.58-13




--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Chuck
Дата 10.4.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 2
Всего: 9



А mysql-client стоит?
И, код в студию!
PM MAIL WWW GTalk   Вверх
Kurt
Дата 10.4.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Цитата
А mysql-client стоит?

Да.
Разве я не указал выше?
Цитата(Kurt)
mysql-3.23.58-13


Цитата
И, код в студию!

В принципе, такая ошибка наблюдается на ЛЮБОМ коде с использованием mysql.h. Но, если нужна конкретика, то вот:

Код
#include <stdio.h>
#include <my_global.h>
#include <mysql.h>

static char *opt_host_name = NULL;
static char *opt_user_name = NULL;
static char *opt_password = NULL;
static unsigned int opt_port_num = 0;
static char *opt_socket_name = NULL;
static char *opt_db_name = NULL;
static unsigned int opt_flags = 0;
static MYSQL *conn;
MYSQL_RES *res_set;
MYSQL_ROW row;
unsigned int i;

int main(int argc, char *argv[])
{
    conn = mysql_init(NULL);
    if (conn == NULL)
    {
        printf("mysql_init() error!\n");
        getchar();
        exit(1);
    };
    if(mysql_real_connect(conn, opt_host_name, opt_user_name, opt_password, opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL)
    {
        printf("mysql_real_connect():\nError %u (%s)\n", mysql_errno(conn), mysql_error(conn));
        mysql_close(conn);
        getchar();
        exit(1);
    };
    if (mysql_query(conn, "show tables from test") != 0)
        printf("mysql_query():\nError %u (%s)\n", mysql_errno(conn), mysql_error(conn));
    else
    {
        res_set = mysql_store_result(conn);
        if(res_set == NULL)
            printf("mysql_store_result():\nError %u (%s)\n", mysql_errno(conn), mysql_error(conn));
        else
        {

            while((row = mysql_fetch_row(res_set)) != NULL)
            {
                for(i = 0; i < mysql_num_fields(res_set); i++)
                {
                    if(i>0)
                        fputc('\t', stdout);
                    printf("%s", row[i] != NULL ? row[i] : "NULL");    
                }
                fputc('\n', stdout);
            }
            if(mysql_errno(conn) != 0)
                printf("mysql_fetch_row():\nError %u (%s)\n", mysql_errno(conn), mysql_error(conn));
            else
                printf("---------\nReturned stings: %lu \n", (unsigned long) mysql_num_rows(res_set));
            mysql_free_result(res_set);
        }
    }
    mysql_close(conn);
    getchar();
    
    exit(0);
}



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Kurt
Дата 15.4.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Неужели никто не втречался? smile
У всех все компилится?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.