[질문] mysql 쿼리 처리문제 입니다. 도움좀 주세요.
글쓴이: kimyh / 작성시간: 토, 2006/11/18 - 7:34오후
아래는 임시파일에 저장된 회원 아이디를 불러내 검색하여 회원이 존재하면 회원아이디와 이름을 출력하고
회원이 아니면 "고객님은 회원이 아닙니다" 라는 메세지를 출력하라는 지극히 간단한 프로그램입니다.
그런데 제가 지금 공부하고 있는 초보자라서 회원이 아닐경우의 메세지 출력을 못하겠군요.
물론 회원일경우에는 아이디와 회원 이름을 출력하는것은 잘 됩니다.
아마 아래 소스중 while((row = mysql_fetch_row(res)) != NULL){
이부분에서 쿼리 내용이 있을경우에만 while문이 동작 하기 때문이 아닌가 생각 되는데 아무리 여기 저기 고처봐도 않되는군요.
선배님들 뭘 어떻게 수정하면 비회원일 경우 "고객님은 회원이 아닙니다" 라는 메세지를 출력할수 있는지 도움좀 주시면 감사하겠습니다.
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/wait.h> #include <mysql.h> #include <unistd.h> // 데이터베이스 관련 상수정의 #define MYSQL_HOST "localhost" #define MYSQL_USER "user" #define MYSQL_PWD "" #define MYSQL_DB "member" // ================================= // 쿼리 정의 #define SEARCH_QUERY "SELECT id, name FROM `member` WHERE `id` = '%s'" // 변수정의 struct user { char id[20]; char name[20]; }member; MYSQL_RES *res; MYSQL_ROW row; MYSQL *conn, mysql; char qbuf[100]; //최대 쿼리의 사이즈 만큼 할당한다. FILE *fp; int ret; char buff[25]; // 함수원형 void conn_mysql(void); // MAIN 함수 int main(){ // 데이터 베이스를 초기화 해서 connection을 얻어 온다. conn_mysql(); // 데이터 베이스의 결과를 메모리에서 해지한다. mysql_free_result(res); // 데이터 베이스 연결을 닫는다. mysql_close(conn); return(0); } // 데이터 베이스 초기화 conn_mysql() void conn_mysql(){ mysql_init(&mysql); conn = mysql_real_connect(&mysql,MYSQL_HOST,MYSQL_USER,MYSQL_PWD,MYSQL_DB,0,0,0); if(conn == NULL){ fprintf(stderr,"데이터 베이스 연결 실패 %s\n",mysql_error(&mysql)); exit(1); } memset (buff, 0, 256); // 사용자 정보 검색 user_search() // 만들어진 새로운 아이디를 추출한다. fp = fopen("imsi/imsiid.txt", "r"); fseek(fp, 0L, 0); ret = fread(buff, 1, 256, fp); fclose(fp); // 입력 받은 데이터를 이용 쿼리를 생성 sprintf(qbuf,SEARCH_QUERY,buff); if(mysql_query(conn,qbuf)){ fprintf(stderr,"질의 실패 %s\n",mysql_error(conn)); exit(1); } // 질의를 한 결과를 출력한다. res = mysql_store_result(conn); while((row = mysql_fetch_row(res)) != NULL){ // 지역변수 선언 char *mb_name_buff, mb_name_buf[20]; // 이름값 저장 strcpy(name_buf, row[1]); name_buff = strdup(name_buf); // 비회원일경우 안내 메세지 출력 처리 if(name_buff == NULL){ puts("고객님은 회원이 아닙니다."); } // 회원일경우 회원 아이디와 이름 출력 printf("아이디 ; %-10s \n이 름 ; %-20s \n",row[0],row[1]); } }
Forums:
id= 으로
id= 으로 비교하였으니 결과는 1줄 혹은 0줄 이겠지요.
mysql_fetch_row 값이 있으면 있는거고 없으면 없는거로 처리하는게 맞을 것 같네요.
emerge money

https://xenosi.de/
답변 감사합니다.
답변 감사합니다.
회원여부 비교하는 부분을 아래와 같이 바꿔봤는데 이상하게도 회원일경우 else if{
아래로 넘어가지를 않는데 도무지 이해를 할수가 없군요.
printf("%d", row); 해서 row의 값을 확인해보면 비회원일경우 0 이 분명하고 회원일경우는 152523라고 0이
나오지를 않거든요.
그런데 왜 if문이 제대로 동작을 하지 않은지 도무지 이해를 못 하겠군요.
===========================================
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
fetch 하고 또 fetch
fetch 하고 또 fetch 했네요.;)
emerge money

https://xenosi.de/
답변 감사합니다.
답변 감사합니다.
아마 님께서 말씀 하신 내용은
row = mysql_fetch_row(res); 과 while((row = mysql_fetch_row(res)) != NULL)
이부분을 두고 하시는 말씀 같은데 이런 방식이 아니면 비교할 대상을 찾지를 못 하겠군요.
아이디나 이름값으로 비교를 할려고 해도 이는 where문 내에서만 가능 하고 where문 내에서도 if문이 제대로 동작이 않되더군요.
처음엔 무척 간단하게 생각했는데 지금은 엄청 고생하고 있습니다.
도움좀 주세요.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
row 는 이미
row 는 이미 받았습니다.
row != 0 도 확인 했습니다.
while 걷어내고 그냥 printf 해보세요.
emerge money

https://xenosi.de/
감사합니다. 해결됐습니다.
알려 주신대로 while문을 제거 하니까 되는군요.
저는 while문에서 row 값이 0이 될때까지 돌아야 하는것으로 잘못 생각하고 꼭 있어야 되는것으로 잘못알고 있었군요.
바쁘실텐데도 계속 답변 올려주신 님께 진심으로 감사드립니다.
감사합니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
댓글 달기