2012-05-07 3 views
3

C에서 이해할 수없는 이상한 동작이 있습니다. 아마 내가 C에서 상당히 새롭기 때문에 나 일 것입니다. 내가 성취하고자하는 것은 MySQL 쿼리를 실행하고 결과를 반환하는 함수를 작성하는 것입니다. 이상한 것은 아래 코드에서 연결을 닫고 결과를 자유롭게하면 (내가 주문할 것으로 예상했기 때문에) 내가 'retvalue'에 저장 한 값이 더 이상 존재하지 않는 것 같습니다. 결과를 저장하고 연결을 종료하기 전에 반환 값을 반환하면 값이 반환되지만 분명히 연결이 닫히지 않으며 MySQL은 결국 '너무 많은 연결'오류를 표시합니다.C에서 연결을 닫은 후 함수에서 MySQL 쿼리의 결과를 반환하십시오.

int CheckBox(char *mac) 
{ 
MYSQL *conn; 
MYSQL_RES *res; 
MYSQL_ROW row; 

/* database details */ 
char *server = "localhost"; 
char *user = "user"; 
char *password = "pw"; 
char *database = "db"; 
int retvalue; 

conn = mysql_init(NULL); 

/* connect to database */ 
if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)) 
{ 
    fprintf(stderr, "%s\n", mysql_error(conn)); 
    exit(1); 
} 

/* create and send SQL query */ 
char query[1600]; 
sprintf(query,"SELECT * FROM boxes WHERE mac = '%s'", mac); 
if (mysql_query(conn, query)) 
{ 
    fprintf(stderr, "%s\n", mysql_error(conn)); 
    exit(1); 
} 

res = mysql_use_result(conn); 
/* check result to see if we have a hit */ 
if ((row = mysql_fetch_row(res)) != NULL) 
{ 

    printf("mac (%s) did exist with id %s.\n",mac,(char *)row[0]); 
    retvalue = (int)row[0]; 
} else 
{ 
    printf("mac (%s) did NOT exist ",mac); 
    /* mac address did not yet exist, so create it */ 
    sprintf(query,"INSERT INTO boxes (mac) VALUES ('%s')",mac); 
    if (mysql_query(conn, query)) 
    { 
     fprintf(stderr, "%s\n", mysql_error(conn)); 
     exit(1); 
    } else 
    { 
     printf("but now does\n"); 
     CheckBox(mac); 
    } 
} 

/* close connection */ 
mysql_free_result(res); 
mysql_close(conn); 

/* return id number of box */ 
return retvalue; 
} 

그래서 질문은 다음과 같습니다 내가 바로 그 첫 번째 결과를 확보하고 올바른 순서를 연결한다 닫는 생각하는 건가요? 과 같은 함수를 실행할 때 retvalue에 할당 한 값은 왜 사라 집니까?

+0

'더 이상 존재하지 않는다'는 것은 무엇을 의미합니까? – asaelr

+0

이상한 행동은 내가 만든 캐스트로 작동하는 것처럼 보였습니다.하지만 연결을 닫지 않고 결과를 해제하지 않은 경우에만 가능했습니다. 캐스트를 변경하라는 제안은 놀라운 일을했습니다. 감사! – lleto

답변

4

캐스트 retvalue = (int)row[0] :-) 초보자에게 친절에 대한

감사는 잘못된 것입니다. 결과의 주소 (int로 변환)를 retvalue에 넣습니다. row[0]char*이므로 retvalue=atoi(row[0])을 사용해야합니다.

관련 문제