[ 소스 ]
/*________________________________________________________________________
* 작성자 : 윤영한 (shee@ilinuxbay.com)
* 작성일 : 2003. 08. 25. (월) 13:36:42 KST
* 화일명 : mysql_member.c
* 내 용 : 유저에 대한 정보를 MYSQL C API를 이용
* 해서 관리한다.
* 참 조 : Teach Yourself C week 기본 골격을 이용
* 수업용 교재로 이용 활용 가능성 구현
* - 모듈화 및 중복성 배제
* - http://ilinuxbay.com/
*
* MYSQL :
*
* CREATE TABLE `member` (
* `idx` int(11) NOT NULL auto_increment,
* `id` varchar(20) NOT NULL default '',
* `name` varchar(20) NOT NULL default '',
* `email` varchar(50) NOT NULL default '',
* PRIMARY KEY (`idx`)
* ) TYPE=MyISAM
*
* HOWTO COMPILE :
* gcc -o mysql_member mysql_member.c -I/usr/local/mysql/include/mysql \
* -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm
* ______________________________________________________________________*/


//라이브러리 선언
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<mysql.h>
#include<sys/time.h>

//상수정의
#define YES1
#defineNO0
#defineMYSQL_HOST"localhost"
#defineMYSQL_USER"root"
#defineMYSQL_PWD""
#defineMYSQL_DB"work"

//쿼리 정의
#define SELECT_QUERY"SELECT idx, id, name, email FROM `member`"
#define INSERT_QUERY"INSERT INTO `member` ( `idx` , `id` , `name` , `email` ) VALUES ( '', '%s', '%s', '%s' )"
#define DELETE_QUERY"DELETE FROM `member` WHERE idx='%s'"
#define UPDATE_QUERY"UPDATE `member` SET `id` = '%s',`name` = '%s',`email` = '%s' WHERE `idx` = '%s'"
#define SEARCH_QUERY"SELECT idx, id, name, email FROM `member` WHERE name LIKE '%s'"

//변수정의
struct user {
char idx[20];
char id[20];
char name[20];
char email[50];
}member;

MYSQL_RES*res;
MYSQL_ROWrow;
MYSQL*conn, mysql;
char qbuf[160];//최대 쿼리의 사이즈 만큼 할당한다.

//함수원형

void conn_mysql(void);
void user_list(void);
void user_input(void);
void user_modify(void);
void user_del(void);
void user_search(void);
int continue_fun(void);
int display_menu(void);

//MAIN 함수
int main(){

//지역변수선언
int cont = YES;

//데이터 베이스를 초기화 해서 connection을 얻어 온다.
conn_mysql();

//메뉴 출력
while( cont == YES){
switch( display_menu()){
case '1' :user_list();
break;
case '2' :user_input();
break;
case '3' : user_modify();
break;
case '4' :user_del();
break;
case '5' :user_search();
break;
case '6' : printf("\n프로그램 종료 !\n");
cont =NO;
break;
default:printf("\n\n메뉴중 1~6 사이의 번호를 선택해 주세요.");
break;
}//__end switch
}//__end while

//데이터 베이스의 결과를 메모리에서 해지한다.
mysql_free_result(res);

//데이터 베이스 연결을 닫는다.
mysql_close(conn);
return(0);
}

//함수선언
// 데이터 베이스 초기화 : conn_mysql()
void conn_mysql(void){
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);
}
}

//사용자 리스트를 출력 : user_list()
void user_list(void){
puts("___________________________________________________________________");
puts("idx : ID : 이름 : 이메일");
puts("-------------------------------------------------------------------");

//MYSQL에 질의
if((res = mysql_query(conn,SELECT_QUERY)) != NULL){
fprintf(stderr,"질의 실패 : %s\n",mysql_error(conn));
exit(1);
}
//질의를 한 결과를 출력한다.
res=mysql_store_result(conn);

while((row=mysql_fetch_row(res)) != NULL){
printf("%-6s %-10s %-20s %-50s \n",row[0],row[1],row[2],row[3]);
}
}

//사용자 정보 입력 : user_input()
void user_input(void){

puts("___________________________________________________________________");
puts(" 사용자 입력");
puts("-------------------------------------------------------------------");
printf(" 사용자 ID : ");
fgets(member.id,sizeof(member.id),stdin);
member.id[strlen(member.id)-1]='\0';

printf(" 사용자 이름 : ");
fgets(member.name,sizeof(member.name),stdin);
member.name[strlen(member.name)-1]='\0';

printf(" 사용자 이메일 : ");
fgets(member.email,sizeof(member.email),stdin);
member.email[strlen(member.email)-1]='\0';

//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,INSERT_QUERY,member.id,member.name,member.email);

if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 : %s\n",mysql_error(conn));
exit(1);
}
}

//사용자 정보 수정 : user_modify()
void user_modify(void){


puts("___________________________________________________________________");
puts(" 사용자 수정");
puts("-------------------------------------------------------------------");
printf("수정의 원하는 idx :");
fgets(member.idx,sizeof(member.idx),stdin);
member.id[strlen(member.idx)-1]='\0';

printf(" 사용자 ID : ");
fgets(member.id,sizeof(member.id),stdin);
member.id[strlen(member.id)-1]='\0';

printf(" 사용자 이름 : ");
fgets(member.name,sizeof(member.name),stdin);
member.name[strlen(member.name)-1]='\0';

printf(" 사용자 이메일 : ");
fgets(member.email,sizeof(member.email),stdin);
member.email[strlen(member.email)-1]='\0';

//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,UPDATE_QUERY,member.id,member.name,member.email,member.idx);

if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 : %s\n",mysql_error(conn));
exit(1);
}
}

//사용자 정보 삭제 : user_del()
void user_del(void){

puts("___________________________________________________________________");
puts(" 사용자 삭제");
puts("-------------------------------------------------------------------");
printf("삭제를 원하는 idx :");
fgets(member.idx,sizeof(member.idx),stdin);
member.id[strlen(member.idx)-1]='\0';

//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,DELETE_QUERY,member.idx);

if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 : %s\n",mysql_error(conn));
exit(1);
}
}

//사용자 정보 검색 : user_search()
void user_search(void){

puts("___________________________________________________________________");
puts(" 사용자 검색");
puts("-------------------------------------------------------------------");
printf("이름으로 검색 name :");
fgets(member.name,sizeof(member.name),stdin);
member.name[strlen(member.name)-1]='\0';
strcat(member.name,"%");

//입력 받은 데이터를 이용 쿼리를 생성
sprintf(qbuf,SEARCH_QUERY,member.name);

if(mysql_query(conn,qbuf)){
fprintf(stderr,"질의 실패 : %s\n",mysql_error(conn));
exit(1);
}

//질의를 한 결과를 출력한다.
res=mysql_store_result(conn);
puts("");
puts("___________________________________________________________________");
puts("idx : ID : 이름 : 이메일");
puts("-------------------------------------------------------------------");

while((row=mysql_fetch_row(res)) != NULL){
printf("%-6s %-10s %-20s %-50s \n",row[0],row[1],row[2],row[3]);
}
}

//프로그램 진행 체크 함수 menu_continue()

int continue_fun(void){
char ch, buf[20];
do{
printf("\n계속 하시겠습니까 ? (Y)es/(N)o :");
fgets(buf,sizeof(buf),stdin);
ch=*buf;

}while(strchr("NnYy",ch)== NULL);

if(ch== 'n' || ch=='N'){
return(NO);
}else{
return(YES);
}
}

//메뉴 선택 함수 : display_menu()
int display_menu(void){
char ch, buf[20];
puts("");
puts(" MENU ");
puts("_______________");
puts("");
puts("1. 사용자 리스트");
puts("2. 사용자 입력 ");
puts("3. 사용자 수정 ");
puts("4. 사용자 삭제 ");
puts("5. 사용자 검색 ");
puts("6. 종료 ");
printf("\n\n 메뉴 선택 : ");
fgets(buf,20,stdin);
ch= *buf;
return(ch);
}



출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=22690

'MySQL' 카테고리의 다른 글

MySQL C-API Example  (0) 2006.11.20
MySQL C API 로 unicode 데이터 insert 하기  (0) 2006.11.19
MySQL C API 설명  (0) 2006.11.19
MySQL For C API  (0) 2006.11.19
Mysql Tip  (0) 2006.05.14
, .