C API 를 사용해서 UNICODE 데이터를 DB에 넣고싶습니다.

DB는 MySQL 4.1.26 이고 디폴트 문자셋을 utf8 로 세팅했습니다.

웹 -> DB -> 웹 으로 utf8 로 된 데이터가 잘 등록되거 읽어지는것을 확인했습니다.

그리고 DB -> App 로 utf8 데이터를 잘 가져와서 콘솔화면에 잘 표시

(가져온 데이터를 utf8 에서 현재 사용하는 콘솔의 문자셋으로 변환) 하는것 까지 해결했습니다.

이제 남은것은 유니코드 데이터를 DB에 저장시키는 것입니다.

전세계 수많은 클라이언트에서 그들만의 문자셋으로 로그가 생성되며 그것을 다시 Unicode 로 변환해서

서버로 전송됩니다.

서버에서는 받은 Unicode 로 된 데이터를 MySQL DB에 기록해야하는데 그 방법을 모르겠습니다.

int queryResult = mysql_query(&mysql, "INSERT INTO unicodetable(name) values('ab한글efg') ");

같은 코드는 제대로 입력도 안됩니다.

그렇다고
int queryResult = mysql_query(&mysql, L"INSERT INTO unicodetable(name) values('ab한글efg') ");
이렇게하면 mysql_query 함수의 인자 타입이 맞지 않습니다.

도저히 답이 안나옵니다. 어떻게 DB에 데이터를 넣을 수 있을까요?

일단 데이터를 무사히 가져오는 부분을 올립니다.

int _tmain(int argc, _TCHAR* argv[])
{
MYSQL mysql;
MYSQL_RES* res;
MYSQL_ROW row;

mysql_init(&mysql);

if(!mysql_real_connect(&mysql, "localhost", "user1", "password", "test", 3306, (char*)NULL, 0))
{
//error
return 0;
}

if(mysql_query(&mysql, "set names utf8"))
{
//error
mysql_close(&mysql);
return 0;
}

//int queryResult = mysql_query(&mysql, "INSERT INTO unicodetable(name) values('ab한글efg') ");
int queryResult = mysql_query(&mysql, "select * from unicodetable");

if( queryResult == 0 )
{
//error
}
//query_stat = mysql_query(connection, query);
//if (query_stat != 0)


char buf[256];
res = mysql_store_result(&mysql);
int fields =mysql_field_count(&mysql);
if( res )
{
while((row=mysql_fetch_row(res)))
{
for(int cnt=0;cnt {
UTF8Decode(row[cnt], buf, sizeof(buf));
printf("%s ", buf);
}
printf("\n");
}
}
mysql_free_result(res);

mysql_close(&mysql);
}

'MySQL' 카테고리의 다른 글

C 와 MySQL 의 연동  (0) 2006.11.20
MySQL C-API Example  (0) 2006.11.20
MySQL C API 설명  (0) 2006.11.19
MySQL For C API  (0) 2006.11.19
Mysql C API를 이용한 초간단 회원 관리  (0) 2006.11.19
, .

MySQL C API 설명

MySQL 2006. 11. 19. 03:10

MySQL C API

1) my_ulonglong mysql_affected_rows(MYSQL* mysql)
INSERT, UPDATE, DELETE 등의 query로 영향을 받은 ROW의 수를 리턴한다.

2) void mysql_close(MYSQL* mysql) 서버와의 연결을 종료한다.

3) void mysql_data_seek(MYSQL_RES* result, unsigned int offset)
result에서 임의의 ROW에 접근을 하도록 하는 함수이다. offset이 row의 번호를
나타낸다. 0이면 처음 ROW, mysql_num_rows( result ) - 1 은 마지막 row를 나타낸다.

4) unsigned int mysql_errno(MYSQL* mysql)
가장 최근에 mysql에 일어난 에러의 번호를 리턴한다.

5) char* mysql_error(MYSQL* mysql) 가장 최근에 일어난 에러 메시지를 리턴한다.

6) MYSQL_FIELD* mysql_fetch_field(MYSQL_RES* result)
한번 호출할 때마다 한 나의 필드에 대한 정보를 리턴한다.

7) MYSQL_FIELDS* mysql_fetch_fields(MYSQL_RES* result)
배열 형대로 result의 필드에 대한 정보를 한꺼번에 리턴한다.

8) MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL* mysql, MYSQL_FIELD_OFFSET offset)
임의의 필드에 접근을 하도록 한다.

9) MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES* result)
현재 필드의 offset을 리턴한다.

10) void mysql_free_result(MYSQL_RES* result)
result에 할당된 메모리를 해제한다.

11) MYSQL* mysql_init(MYSQL* mysql)
mysql 객체를 초기화 한다. 인자가 NULL이면 새로운 MYSQL 객체를 생성하고, 초기화 하여 리턴한다.

12) MYSQL_RES* mysql_list_dbs(MYSQL* mysql, const char* wild)
현재 서버에 있는 데이타베이스의 목록을 리턴한다. wild는 MySQL에서
사용할 수 있는 정규식을 나타낸다.
result = mysql_list_dbs( &mysql,"%" )
는 모든 데이타베이스를 리턴하는 예이다.(%는 '모든'을 나타낸다)

13) MYSQL_RES* mysql_list_tables(MYSQL* mysql, const char* wild)
현재 데이타베이스에 있는 테이블들의 목록을 리턴한다.

14) unsigned int mysql_num_fields(MYSQL_RES*result) 혹은
unsigned int mysql_num_fields(MYSQL* mysql)
필드의 수를 리턴한다.

15) my_ulonglong mysql_num_rows(MYSQL_RES* result)
result에 총 몇 개의 ROW가 있는지 리턴한다. query 수행 후
mysql_store_result()를 호출하였을 경우에만 사용할 수 있고,
mysql_use_result()는 사용할 수 없다.

16) int mysql_ping(MYSQL* mysql)
서버에 연결 중인지를 리턴한다. 연결이 끊어 졌을 경우, 다시
연결을 시도한다. 서버와 연결을 한 후 오랫동안 가만히 있으면
서버가 연결을 끊어버리는데, 이런 경우에 사용한다.

17) int mysql_query(MYSQL* mysql, const char* query)
query가 포인트 하는 쿼리를 수행한다. query의 끝은 NULL 문자이다.
성공적으로 query를 수행하였으면 0을 리턴한다.

18) MYSQL* mysql_real_connect(MYSQL* mysql, const char* host, const char* user,
const char* passwd, const char* db, uint port, const char* unix_socket,unit client_flag )
host와의 연결을 시도한다.

19) int mysql_real_query(MYSQL* mysql, const char* query, unsigned int length)
mysql_query()처럼 query를 수행하나, query의 끝이 legnth인 것이 다르다.

20) MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES* result)
현재 ROW의 offset을 리턴한다.

21) int mysql_select_db(MYSQL* mysql, const char* db)
사용하고자 하는 database를 변경한다. mysql_query()를 이용하여 "use db이름"
의 query를 수행해도 같은 결과를 얻는다.

22) int mysql_shutdown(MYSQL* mysql)
서버를 종료시킨다. 현재 사용자에게 shutdown 권한이 있어야 한다.

23) MYSQL_RES* mysql_store_result(MYSQL* mysql)
query의 수행 결과를 서버로부터 한 번에 모두 받아 온다.

24) MYSQL_RES* mysql_use_result(MYSQL* mysql)
query의 수행 결과를 서버로부터 한 개의 ROW 씩 받아 온다.

http://hobak.emailkorea.net/hobak/bbs/zboard.php?id=hGuest&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=name&desc=asc&no=4


'MySQL' 카테고리의 다른 글

MySQL C-API Example  (0) 2006.11.20
MySQL C API 로 unicode 데이터 insert 하기  (0) 2006.11.19
MySQL For C API  (0) 2006.11.19
Mysql C API를 이용한 초간단 회원 관리  (0) 2006.11.19
Mysql Tip  (0) 2006.05.14
, .

MySQL For C API

MySQL 2006. 11. 19. 03:04

간단하게나마 DB에서 가장 많이 사용되는 ( 게임용 DB 로도 가장 많이 사용 되는 )

MySQL For C API 에 대해서 알아 보고 최후로 DB 접근을 하기 위한 종단 서버 구성으로

마쳐 볼까 합니다 :)
이것 역시 언제 끝날지는 알 수 없습니다 시간 날 때마다 하겠습니다.
개인적으로 sql query문이 제가 약한 관계로 :) 제대로 된 글이 될 거라는 생각은 안 합니다.

휴 정말 간만에 들어오네요 :) 제가 너무 정신이 없어서

( 논다고 바빳습니다. 기다리는 분은 전혀 없었겠지만 )
2번에 나놔서 정리 할까 합니다.

첫번째로는 함수 나열과 정리를 하고 두번째는 실전 소스로 나눠서 정리할까 합니다.

실제 많은 api함수들이 있지만 자주 사용하는 것 몇가지만 알아보겠습니다.

아.. VS6에서는 컴파일을 위해서는
MYSQL/INCLUDE 폴더를 포함시켜 주시고 libmysql.lib를 포함 시키지 않으면

반가운 링크에러들이 뜰겁니다.
리눅스에서는 make 파일에 여러가지를 추가 시켜야겠죠.

정확한 include 파일 경로를 찾으려면,



# find / -name mysql.h



정확한 공유 라이브러리 파일 경로를 찾으려면,



# find / -name libmysqlclient.so



하시면 됩니다.



INC = -I/usr/local/mysql/include/ // 기본적인 mysql.h 위치입니다.
LIB = -L/usr/local/mysql/lib/ // libmysql.lib 이 있는 곳의 위치 입니다.
LIBS= -lmysqlclient // lib 파일이죠

$(TARGET) : $(OBJS)
$(CXX) $(LDFLAGS) $(LIBS) -o $(TARGET) $(OBJS)


와 같이 하면 컴파일에 문제가 없을겁니다.
컴파일 얘기는 다음에 한번더 자세하게 makefile과 함께 하고 오늘은 자주 사용하는 함수만

정리 하겠습니다.



| __mysql_init()__ | mysql 초기화 함수 입니다.return 값은 연결식별값 (MYSQL*) 실패하면 FALSE 가 리턴 됩니다.
| __mysql_connect()__ 또는 __mysql_real_connect()__ | mysql 접속 함수 입니다.mysql_real_connect() 함수만을 이용합니다.
| __mysql_select_db()__ | mysql DB 선택 함수입니다. 어떤 DB를 선택 할것인지 하는 것이죠
| __mysql_close()__ | mysql을 서버와의 접속을 끊습니다.
| __mysql_query()__ | 쿼리를 실행 시킵니다.
| __mysql_fetch_row()__ | Result Set 에서 하나의 로우를 배열로 가져 옵니다.
| __mysql_store_result()__ | Result Set 을 저장 합니다.
| __mysql_free_reslut()__ | Result Set 을 메모리에서 제거 합니다.
| __mysql_errno()__ | 에러 번호를 리턴합니다.
| __mysql_error()__ | 에러에 대한 설명을 리턴합니다.


이제는 저 위에 함수들을 어떻게 사용 하는가에 대해서 간단한 예문을 통해서

알아 볼까 합니다.
지금 위키에서 바로 코딩을 하는 관계로 컴파일이 안 될수도 있습니다 (__)

그냥 어떻게 사용하는가만 알아 보자는 겁니다.



#define dDB_HOST"아이피"
#define dDB_PORT3306
#define dDB_ID"아이디"
#define dDB_PW"db 패스워드"
#define dDB_NAME"DB 명 "

#include <mysql.h>

MYSQL* mysql;

MYSQL *DBConnect( char * host , int port , char *id , char *pw , char *dbName )
{
MYSQL *db = NULL;

db = mysql_init( (MYSQL*)NULL );// 초기화 함수

if( db )
{
if( mysql_real_connect( db, host, id, pw, NULL, port, (char*)NULL, 0 ) ) // DB 접속
{
if( mysql_select_db( db, dbName ) != 0 ) // DB 선택
{
mysql_close( db );
return NULL;
}
}
else // connect error
{
printf( "Error %d ( %s )\n", mysql_errno( db ), mysql_error( db ) );
mysql_close( db );
return NULL;
}
}
else
return NULL;
return db;
}

int main()
{
mysql = DBConnect( dDB_HOST , dDB_PORT, dDB_ID , dDB_PW, dDB_DBNAME );
if( ! mysql )
{
return -1 ;
}

char Query[128];
sprintf( Query," select ......등등 필요한 쿼리들" );

if( !mysql_query ( mysql, Query))
{
MYSQL_RES *result = mysql_store_result( mysql );

if( result )
{
MYSQL_ROW row;

row = mysql_fetch_row( result );
// 그리고 각 원하는 것들을 여기에다가 변수에 저장 한다.
// id= atoi ( row[0] ) ; 이런 식으로 ...
}
mysql_free_result( result );
}

mysql_close( mysql );
return 0;
}


정말 간만에 수정 하는 군요 -_-+
몇마디 더 추가 하고자 이렇게 글을 올리게 됐네요



$ gcc -o mysql mysql.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient


이런식으로적으면 컴파일이 돼겠습니다요
이렇게 하면 mysql 이라는 게 생기겠죠
뭐 더 확실하게 알아 보고자 하면 연결 완료 나 종료에 대해서 printf 문등을 통해서 알아보던지아니면 로그파일로 남기셔도 될듯하고요
여기서 주의 할점은 Mysql For C API를 사용할때는 -lmysqlclient 이 녀석입니다. 라이브러리를 연결 하는 녀석이죠.
libmysqlclient.so 를 찾아서 링크 시켜 주는 역할을 합니다.

자 여기서 C API 의 자료형에 대해서 몇가지 알아 보겠습니다.


|MYSQL|Database와의 연결을 관리하는 구조체입니다.
|MYSQL_RES|SELECT 등 결과를 리턴하는 query의 결과를 나타내는 자료형입니다.
|MYSQL_ROW|MYSQL_RES에서 하나의 레코드씩 값을 얻어 올때 쓰이는 자료형입니다.
|MYSQL_FIELD|필드의 이름과 필드의 타입 등 필드에 관한 정보를 저장하는 자료형입니다.



(에러 문구는 mysql for C API 문서에서 발견을 했는데 출처를 모르겠군요 )



이번에는Mysql For C API 를 이용하면서 나올 에러들에 대해서 대처해보기 위해서 에러에 대해서 알아 보겠습니다.



1) "msyql.c:2: mysql.h: 그런 파일이나 디렉토리가 없음"

;:이 경우는 mysql.h의 경로를 찾을 수 없어서 나는 에러입니다. 다시 한번 mysql.h가 어디에 있는지 확인을 하고, -I옵션으로 그 경로를 지정해야 합니다.

이럴때 whereis 나 find 등을 잘써서 찾아 봅시다.

뭐 기본적으로 기본 경로에설치하면 아무 문제 없습니다.



2) "mysql.o(.text+0x11): undefined reference to `mysql_init'"

;:위와 같이 'undefined reference......' 라고 나오는 에러는 -lmysqlclient 옵션을 안줘서 생기는 에러 입니다.



3) "ld: cannot open -lmysqlclient: 그런 파일이나 디렉토리가 없음"

;:위의 에러는 -L옵션 뒤에 붙은 라이브러리의 경로가 잘못 되었을때 생깁니다. libmysqlclient.so 파일의 경로를 찾아서 그 경로 지정을 해주시면 됩니다.



4) "Can't connect to local MySQL server "

;:위의 에러는 MySQL의 서버에 연결을 할 수 없다는 메시지로서,

MySQL 서버의 데몬이 실행 중이지 않을 때 나오는 메시지입니다.



5) "Access denied for user: 'root@localhost' (Using password: YES)"

;:사용자 아이디를 잘못 입력하거나, 암호를 잘못 입력하였을 때 나오는 메시지입니다.

MySQL의 사용자는 모두 mysql database의 user 테이블에 있습니다.



6) "./sql: error in loading shared libraries libmysqlclient.so.6: cannot open shared object file: No such file or directory"

;:MySQL의 라이브러리를 열지 못한다는 메시지입니다.

컴파일 할 때 MySQL의라이브러리를 사용하는데, 동적 라이브러리이므로 실행시에도

라이브러리가 필요하게 된다.

ibmysqlclient.so가 /usr/lib 혹은 /usr/lib/mysql 디렉터리에 존재 하지 않을 경우에 발생하는

문제입니다.

/etc/ld.so.conf 파일에libmysqlclient.so가 있는 경로를 적어 준 후에 ldconfig 라는 명령을

프롬프트에서 실행하여 주면 됩니다.


원본출처 :
http://ngps.net/ngpiki/index.php?display=MySqlForCApi

'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 C API를 이용한 초간단 회원 관리  (0) 2006.11.19
Mysql Tip  (0) 2006.05.14
, .
[ 소스 ]
/*________________________________________________________________________
* 작성자 : 윤영한 (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
, .