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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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