[ 소스 ]
/*________________________________________________________________________
* 작성자 : 윤영한 (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
, .

Mysql Tip

MySQL 2006. 5. 14. 22:14

mysql 시동/정지

mysql start

/usr/local/mysql/share/mysql/mysql.server start

mysql stop

/usr/local/mysql/share/mysql/mysql.server stop

콘솔에서 한글 입력이 안될때

mysql에서만 한영 전환키를 이용해서 한글 입력이 안되는 것 이라면

레드햇의 LANG 을 바꿔준다.

export LANG=en_US.iso885915

Insert에서 중복 오류시 update하는 방법

INSERT INTOtable_name (col1, col2, ..., )
VALUES(value1, value2, ...)
ON DUPLICATE KEY UPDATEcol1 = value1,col2 = value2,...

select 할때 문자 변환

컬럼

----------

1180-1183

1122/332

11/3243

118-221

셀렉트 햇을때

/ 문자를 -로 바꿔서 출력하는 방법

replace(컬럼, "/" ,"-")

+ MySQL Root 패스워드 분실시...

실행중인 MySQL 데몬을 정지시킨 후 -Sg (Skip GrantTable)옵션을 주고 MySQL을 기동한다.

root@ ...]# /etc/rc.d/init.d/mysqld stop 또는
root@ ...]# mysqladmin -uroot -p shutdown

(데몬을 죽일때도 패스워드를 요구할 때는 kill 사용.

root@ ...]# safe_mysqld -Sg --language=korean &

root@ ...]# mysql

위와 같이 Sg 옵션을 주면 사용자 권한을 체크하지 않으므로 MySQL에 접속이 가능해진다.

mysql> use mysql; (보통은 이렇게 안써도 되지만...)

mysql> update user set password=password('사용하고자하는 패스워드') where user='root';

위와 같이 Root 패스워드를 업데이트한 후 MySQL데몬을 Sg 옵션없이 정상적으로 기동하도록한다.

http://www.superuser.co.kr/home/lecture/index.php?cateNo=3&secNo=16&theNo=49&leccode=10274

(링크에서 DB사용자 추가시에 mysql 버젼에 따라 테이블에 입력되는 y의 개수가 다르므로 주의!)

mysql dns 문제 우회방법

-MySQL쪽메일링리스트에서는제시한해결책
(참고:http://kldp.co.kr/jsboard/read.php?table=tip&no=8633&page=8)

-해결방법
1./etc/my.cnf에[mysqld]에skip-name-resolve한줄추가하고
mysql재시작하면끝나는문제입니다.
2.마지막으로실행할때--skip-name-resolve옵션을넣어
실행하십시오.safe_mysql--skip-name-resolve

'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 C API를 이용한 초간단 회원 관리  (0) 2006.11.19
, .