не компилируется mysql.h

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Дикс, 28 Jan 2009.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    винда, visual studio 6

    PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include "mysql.h"

    MYSQL mysql;
    MYSQL_RES *res;
    MYSQL_ROW row;

    void exiterr(int exitcode)
    {
      
    fprintf(stderr"%s\n"mysql_error(&mysql));
      exit(
    exitcode);
    }

    int main()
    {
      
    uint i 0;

      if (!(
    mysql_connect(&mysql,"host","username","password")))
         
    exiterr(1);
      if (
    mysql_select_db(&mysql,"payroll")) exiterr(2);
      if (
    mysql_query(&mysql,"SELECT name,rate FROM emp_master"))
         
    exiterr(3);
      if (!(
    res mysql_store_result(&mysql))) exiterr(4);
      while((
    row mysql_fetch_row(res))) {
        for (
    i=mysql_num_fields(res); i++)
          
    printf("%s\n",row[i]);
      }
      if (!
    mysql_eof(res)) exiterr(5);
      
    mysql_free_result(res);
      
    mysql_close(&mysql);
    }
    PHP:
    --------------------Configurationdb2 Win32 Debug--------------------
    Compiling...
    main.cpp
    c
    :\cpp\db2\mysql_com.h(175) : error C2146syntax error missing ';' before identifier 'fd'
    c:\cpp\db2\mysql_com.h(175) : error C2501'SOCKET' missing storage-class or type specifiers
    c
    :\cpp\db2\mysql_com.h(175) : error C2501'fd' missing storage-class or type specifiers
    c
    :\cpp\db2\mysql_com.h(339) : error C2065'SOCKET' undeclared identifier
    c
    :\cpp\db2\mysql_com.h(339) : error C2146syntax error missing ')' before identifier 's'
    c:\cpp\db2\mysql_com.h(340) : error C2059syntax error ')'
    c:\cpp\db2\main.cpp(19) : error C2065'mysql_connect' undeclared identifier
    Error executing cl
    .exe.
    в чем может быть основная проблема?
    mysql api может быть ориентировано на линукс?
     
    #1 Дикс, 28 Jan 2009
    Last edited: 28 Jan 2009
  2. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    578
    Likes Received:
    203
    Reputations:
    13
    У тебя же чётко всё написано: пропущен символ ";", ")" и т.д. и номер строки указан. Открой библиотеку и посмотри. По возможности исправь.
     
  3. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    Подключи winsock2.h
    Не уверен, но возможно.
     
  4. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Дикс, во-первых, ты на винде, чтобы нормально можно было работать в консоли под винды обязательно нужно включить windows.h - именно тут идут определения сложных типов данных таких, как SOCKET и т.д. Это тебя избавит от ряда ошибок. Во-вторых, нужно обязательно прилинковать libmysql.lib к проектy. В-третьих - mysql_connect уже нельзя использовать... Это только пережиток семплов... Девелоперы её запретили как устаревшую, есть альтернатива - mysql_real_connect. Давай пробуй... Ниже линк на мой проект под VS 6.0 - тут всё компилится.

    http://groundhog.ru/mysql.rar

    Code:
    #pragma comment(lib,"libmysql.lib")
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include "mysql.h"
    
    MYSQL mysql;
    MYSQL_RES *res;
    MYSQL_ROW row;
    
    void exiterr (int exitcode) {
    	fprintf(stderr, "%s\n", mysql_error(&mysql));
    	exit(exitcode);
    }
    
    int main () {
    	unsigned int i = 0;
    
    	mysql_init(&mysql);
    
    	if (!mysql_real_connect(&mysql, "localhost", "root", "!root!", "test", 0, NULL, 0)) exiterr(1);
    	if (mysql_query(&mysql, "SELECT name,rate FROM emp_master")) exiterr(3);
    	if (!(res = mysql_store_result(&mysql))) exiterr(4);
    
    	while((row = mysql_fetch_row(res)))
    		for (i=0 ; i < mysql_num_fields(res); i++)
    			printf("%s\n", row[i]);
    
    	if (!mysql_eof(res)) exiterr(5);
    
    	mysql_free_result(res);
    	mysql_close(&mysql);
    
    	return 0;
    }
    Да! И не забывай про http://phpclub.ru/mysql/doc/c-api-functions.html, всё равно ты не напишешь сходу приложения для работы с мусклом не глядя в шпаргалку...
     
  5. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    наконец-то заработало!
    сначала исправил свой пример, а затем начал использовать вышеуказанный.
    *череда поросячьего визга*

    *ушол писать поисковик
     
    2 people like this.
  6. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Удачки
     
  7. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    читаю тут доки.
    получается нет смысла запускать mysql_eof() как в примере groundhog - ведь всё уже выбрано с помощью mysql_store_result()

    тока мне непонятно - че выбрано? если потом приходится в цикле выбирать из res с помощью mysql_fetch_row()

    что такое res?