Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   не компилируется mysql.h (https://forum.antichat.xyz/showthread.php?t=103493)

Дикс 28.01.2009 18:02

не компилируется mysql.h
 
винда, 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 может быть ориентировано на линукс?

herfleisch 28.01.2009 18:13

У тебя же чётко всё написано: пропущен символ ";", ")" и т.д. и номер строки указан. Открой библиотеку и посмотри. По возможности исправь.

oRb 28.01.2009 18:15

Подключи winsock2.h
Не уверен, но возможно.

groundhog 28.01.2009 18:42

Дикс, во-первых, ты на винде, чтобы нормально можно было работать в консоли под винды обязательно нужно включить windows.h - именно тут идут определения сложных типов данных таких, как SOCKET и т.д. Это тебя избавит от ряда ошибок. Во-вторых, нужно обязательно прилинковать libmysql.lib к проектy. В-третьих - mysql_connect уже нельзя использовать... Это только пережиток семплов... Девелоперы её запретили как устаревшую, есть альтернатива - mysql_real_connect. Давай пробуй... Ниже линк на мой проект под VS 6.0 - тут всё компилится.

http://groundhog.ru/mysql.rar

Код:

#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, всё равно ты не напишешь сходу приложения для работы с мусклом не глядя в шпаргалку...

Дикс 28.01.2009 20:31

наконец-то заработало!
сначала исправил свой пример, а затем начал использовать вышеуказанный.
*череда поросячьего визга*

*ушол писать поисковик

groundhog 28.01.2009 20:42

Удачки

Дикс 28.01.2009 22:01

Цитата:

При использовании совместно с mysql_store_result() функция mysql_eof() всегда будет возвращать TRUE.
читаю тут доки.
получается нет смысла запускать mysql_eof() как в примере groundhog - ведь всё уже выбрано с помощью mysql_store_result()

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

что такое res?


Время: 00:26