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에 할당 한 값은 왜 사라 집니까?
'더 이상 존재하지 않는다'는 것은 무엇을 의미합니까? – asaelr
이상한 행동은 내가 만든 캐스트로 작동하는 것처럼 보였습니다.하지만 연결을 닫지 않고 결과를 해제하지 않은 경우에만 가능했습니다. 캐스트를 변경하라는 제안은 놀라운 일을했습니다. 감사! – lleto