Skocz do zawartości

[c] Problem Mysql Api


shrek999

Rekomendowane odpowiedzi

witam

 

mam problem, musze napisac aplikacje małą w C która bedzie komunikować się z mysql'em ale problem jest taki ze sciągając przykładoway program gotowy napisany w necie np:

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
  MYSQL *mysql;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char *query;
  int t,r;

  mysql_init(mysql);
  if (!mysql_real_connect(mysql,"localhost","mysql",
       "mysql","deneme",0,NULL,0))
  {
      printf( "Error connecting to database: %s\n",mysql_error(mysql));
  }
  else printf("Connected...\n");

  query="select * from Deneme";

  t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
  if (t)
  {    
     printf("Error making query: %s\n",
             mysql_error(mysql));
  }          
  else printf("Query made...\n");
  res=mysql_use_result(mysql);
  for(r=0;r<=mysql_field_count(mysql);r++){
          row=mysql_fetch_row(res);
          if(row<0) break;
          for(t=0;t<mysql_num_fields(res);t++){
                  printf("%s ",row[t]);
          }
          printf("\n");
  }
  mysql_close(mysql);
return 0;
}

 

daje polecenie : cc -Wall api.c

 

sypie mi błędami

cc -wall api.c 
/tmp/ccSrycbN.o: In function `main':
api.c:(.text+0x1a): undefined reference to `mysql_init'
api.c:(.text+0x5d): undefined reference to `mysql_real_connect'
api.c:(.text+0x6c): undefined reference to `mysql_error'
api.c:(.text+0xc4): undefined reference to `mysql_real_query'
api.c:(.text+0xd8): undefined reference to `mysql_error'
api.c:(.text+0x101): undefined reference to `mysql_use_result'
api.c:(.text+0x118): undefined reference to `mysql_fetch_row'
api.c:(.text+0x151): undefined reference to `mysql_num_fields'
api.c:(.text+0x173): undefined reference to `mysql_field_count'
api.c:(.text+0x182): undefined reference to `mysql_close'
collect2: ld returned 1 exit status

 

 

wszystkie pakiety jakie mam w systemie związane z mysql'em

[shrek@mytob Pulpit]$ rpm -qa|grep mysql
mysql-libs-5.0.45-6.fc8
mysql-connector-odbc-3.51.14r248-2.fc8
mysql-test-5.0.45-6.fc8
mod_auth_mysql-3.0.0-5
mysql-bench-5.0.45-6.fc8
mysql++-2.3.2-2.fc8
mysql-5.0.45-6.fc8
mysql-gui-tools-5.0r12-4.fc8
libdbi-dbd-mysql-0.8.2-1.2.fc8
mysql-administrator-5.0r12-4.fc8
mysql-proxy-0.5.1-3.fc8
php-mysql-5.2.4-3
mysql-gui-common-5.0r12-4.fc8
mysql-connector-java-3.1.12-3.fc6
mysql-server-5.0.45-6.fc8
mysql-devel-5.0.45-6.fc8
mysql++-devel-2.3.2-2.fc8
mysql-query-browser-5.0r12-4.fc8
mysql++-manuals-2.3.2-2.fc8

 

zawartość /usr/libs/mysql

 

 [shrek@mytob mysql]# pwd
/usr/lib/mysql
[shrek@mytob mysql]# ls
libdbug.a           libmysqlclient_r.so         libmystrings.a
libheap.a           libmysqlclient_r.so.15      libmysys.a
libmyisam.a         libmysqlclient_r.so.15.0.0  libvio.a
libmyisammrg.a      libmysqlclient.so           mysqlbug
libmysqlclient.a    libmysqlclient.so.15        mysql_config
libmysqlclient_r.a  libmysqlclient.so.15.0.0
[root@mytob mysql]# 

 

i pytanie dlaczego to sie nie chce kąpilować? do tej pory wszystko klepałem w windozie pod codeblocksem ale teraz musze napisac to pod linuksa.

 

Z góry dziękuje za wszelką pomoc

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

dobrze tamta sprawa załatwiona ale generalnie siedze od tygodnia i nie moge wykminic jak po podlaczeniu sie do bazy wybrac tabele i zapisac do jakiegos pliku, struktury czy czego kolwiek innego zawartość całej kolumny. Jak zbudować query? czy skorzystać z której funkcji ?

 

bede wdzieczny za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

 

narazie probuje sie oswoic z przykladami...

poczytalem poczytalem i teraz jest tak

 

#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
  MYSQL *mysql;
  MYSQL_RES *res;
  MYSQL_ROW row;
  char *query;
  int t,r;

  mysql_init(mysql);
  if (!mysql_real_connect(mysql,"HOST","USER",
       "PASS","BASE",0,NULL,0))
  {
      printf( "Error connecting to database: %s\n",mysql_error(mysql));
  }
  else printf("Connected...\n");

  query="SELECT kolumna FROM tabela";

  t=mysql_real_query(mysql,query,strlen(query));
  if (t)
  {
     printf("Error making query: %s\n",
             mysql_error(mysql));
  }
  else printf("Query made...\n");
  res=mysql_use_result(mysql);
  /*
       unsigned long *lengths;
       unsigned int num_fields;
       unsigned int i;
       row = mysql_fetch_row(res);
if(row)
       {
num_fields = mysql_num_fields(res);
lengths = mysql_fetch_lengths(res);
       for(i = 0; i < num_fields; i++)
        {
            printf("Column %u is %lu bytes in length.\n", 
                   i, lengths[i]);
        }
       }
*/
for(r= 0 ; r<= mysql_field_count(mysql) ; r++){
               row= mysql_fetch_row(res);
if(row< 0) break;
                       for(t= 0 ; t< mysql_num_fields(res) ; t++){
                               printf("%s ",row[t]);
                       }
                       printf("\n");
       }
       mysql_close(mysql);
return 0;
}

 

problem jest taki ze przy 3 przejscu przez peetle "for(r= 0 ; r<= mysql_field_count(mysql) ; r++)" program maze po pamieci ;/ robi 2 printfy i mam naruszenie ochrony pamieci. Jakimis prontfami testowymi doszedlem do tego ze to musi byc 3 wywolanie mysql_field_count. Jesli ktos ma jakis patent co z tym zrobic zeby poprawnie program sie wykonywał bede wdzieczny.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...