Avatar billede nomak Nybegynder
24. april 2003 - 14:01 Der er 9 kommentarer og
1 løsning

mysql i C

Hey, mig igen :P

har lidt problemer med min mysql funktion..

her er hvad jeg har..

char* do_sql(char buffer[4000])
{
    MYSQL* mysql_handle = mysql_init(NULL);
    MYSQL_RES *result;
    MYSQL_ROW row;

    int num_fields;
    int i;
    char* output;
   
    if(mysql_handle == NULL)
    {
        printf("MySQL error: %s", mysql_error(mysql_handle));
        exit(1);
    }

    if(!mysql_real_connect(mysql_handle, "localhost", "root", "noget", "enDatabase", 0, NULL, 0))
    {
        printf("MySQL error: %s", mysql_error(mysql_handle));
        exit(1);
    }

    mysql_query(mysql_handle, buffer);

    result = mysql_store_result(mysql_handle);
    num_fields = mysql_num_fields(result);

    row = mysql_fetch_row(result);

    mysql_free_result(result);   
    mysql_close(mysql_handle);

    return row;
}

men får en compiler error..

-bash-2.05b$ cc -o server -lm -lz server.c /usr/local/lib/mysql/libmysqlclient.a
server.c: In function `do_sql':
server.c:214: warning: return from incompatible pointer type
-bash-2.05b$

den skulle returnere et array, som man så kan bruge i sin main funktion.. f.eks.

int main(void) {
  char* row = do_sql("SELECT * FROM database WHERE noget");
  printf("%s\n", row[nick]);
}

nogen idéer? :)
Avatar billede arne_v Ekspert
24. april 2003 - 14:08 #1
Prøv med:

MYSQL_ROW do_sql(char buffer[4000])
Avatar billede arne_v Ekspert
24. april 2003 - 14:09 #2
Det er jo hvad du faktisk returnerer.

main skal nok også lavet lidt som så.
Avatar billede nomak Nybegynder
24. april 2003 - 14:14 #3
hvad skal så laves om ved main? har fået selve funktionen til at virke
Avatar billede arne_v Ekspert
24. april 2003 - 14:17 #4
Det skal vel være:

int main(void) {
  MYSQL_ROW row = do_sql("SELECT * FROM database WHERE noget");
  printf("%s\n", row.???);
}

hvor du er nødt til at kigg elidt på MYSQL_ROW for at se hvad ??? skal være.
Avatar billede arne_v Ekspert
24. april 2003 - 14:21 #5
Jeg kiggede lige lidt i mysql.h.

Prøv med:

int main(void) {
  MYSQL_ROW row = do_sql("SELECT * FROM database WHERE noget");
  printf("%s\n", row[n]);
}

hvor n=0 hvis første felt, n=1 hvsi andet felt etc..
Avatar billede nomak Nybegynder
24. april 2003 - 15:27 #6
purde dette så ikke virke?

do_sql("UPDATE users SET pass='fisk' WHERE id='1'");

?
der sker ikk en skid
Avatar billede arne_v Ekspert
24. april 2003 - 15:30 #7
Er id et tekst-felt eller et tal-felt ?

Hvis det er et tal-felt, så skal der ikke '' omkring 1.
Avatar billede nomak Nybegynder
24. april 2003 - 15:52 #8
hjælper ikk noget..
Avatar billede arne_v Ekspert
24. april 2003 - 17:43 #9
Jeg har kigget lidt på MySQL docs.

Jeg tror ikke at do_sql kan udføre en UPDATE, fordi den bruger
mysql_query og det her er slet ikke en query.

Jeg tror du skal over i mysql_execute og prepared statement.
Avatar billede arne_v Ekspert
24. april 2003 - 17:45 #10
Se f.eks. INSERT eksempel på:
  http://www.mysql.com/doc/en/mysql_execute.html
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester