29. april 2003 - 09:52
Der er
12 kommentarer og 1 løsning
mysql_execute() - C API
Hey Experter.. Har lidt problemer med mysql_execute i mit C program, så håber på at der er nogle MySQL hajer her :) sådan ser min funktion ud.. int do_sql(char buffer[4000]) { MYSQL* mysql_handle = mysql_init(NULL); if(mysql_handle == NULL) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } if(!mysql_real_connect(mysql_handle, "localhost", "root", "det_er_jo_lige_det:P", "ja", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } mysql_execute(buffer); if (mysql_error(mysql_handle)) { printf("%s\n", mysql_error(mysql_handle)); } return 1; } men det giver en fejl.. -bash-2.05b$ cc -o server -lm -lz server.c /usr/local/lib/mysql/libmysqlclient.a /tmp/cczN7rHy.o: In function `do_sql': /tmp/cczN7rHy.o(.text+0xfac): undefined reference to `mysql_execute' -bash-2.05b$
Annonceindlæg fra Kommando
29. april 2003 - 09:56
#1
29. april 2003 - 10:07
#2
mysql_query understøtter ikke UPDATE, INSERT og DELETE..
29. april 2003 - 10:13
#3
ikke?
29. april 2003 - 10:24
#4
nope.. det giver en Segmentation fault (core dumped)
29. april 2003 - 11:02
#6
Bruger du "prepared statements" ? Det er vist hvad mysql_execute kan. int mysql_execute(MYSQL_STMT *stmt. <- betyder jo, at den ikke tager en streng (char-buffer) som argument. At mysql_query giver segmentation fault må skyldes noget andet.
29. april 2003 - 11:35
#7
MYSQL_ROW fetch_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", "jaaa", "hmmm", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } mysql_query(mysql_handle, buffer); if (mysql_error(mysql_handle)) { printf("%s\n", mysql_error(mysql_handle)); } result = mysql_store_result(mysql_handle); num_fields = mysql_num_fields(result); row = mysql_fetch_row(result); return row; } sådan ser min funktion ud..
29. april 2003 - 12:54
#8
Umiddelbart ser det korrekt ud. Hvilken linie går den ned på?
29. april 2003 - 14:01
#9
har prøvet udelukkelsesmetoden.. den ser ud til at fejle i første linie af funktionen.. MYSQL* mysql_handle = mysql_init(NULL);
29. april 2003 - 14:10
#10
Så dette giver din fejl: int do_sql(char buffer[4000]) { MYSQL* mysql_handle = mysql_init(NULL); if(mysql_handle == NULL) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } } ?? Det er da mystisk.
29. april 2003 - 14:10
#11
har lavet et lille test program.. #include <stdio.h> #include <string.h> #include "/usr/local/include/mysql/mysql.h" MYSQL_ROW fetch_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", "jojo", "ok", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } mysql_query(mysql_handle, buffer); if (mysql_error(mysql_handle)) { printf("%s\n", mysql_error(mysql_handle)); } result = mysql_store_result(mysql_handle); num_fields = mysql_num_fields(result); row = mysql_fetch_row(result); return row; } int main(void) { MYSQL_ROW test; char sql[500]; sprintf(sql, "UPDATE chat_users SET pass='hej' WHERE nick='NoMak'"); test = fetch_sql(sql); return 1; } det virker fint med en SELECT
29. april 2003 - 14:11
#12
Ok, men der står jo i manualen at du íkke skal prøve på mysql_store_result hvis det ikke er en SELECT.
29. april 2003 - 14:14
#13
Never mind.. funktionen skulle bare skrives lidt om til at virke med UPDATE da det ikke giver noget resultat.. således: int do_sql(char buffer[4000]) { MYSQL* mysql_handle = mysql_init(NULL); if(mysql_handle == NULL) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } if(!mysql_real_connect(mysql_handle, "localhost", "root", "asdasd", "asdasd", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(mysql_handle)); exit(1); } mysql_query(mysql_handle, buffer); if (mysql_error(mysql_handle)) { printf("%s\n", mysql_error(mysql_handle)); } return 1; } :)
Computerworld tilbyder specialiserede kurser i database-management