C 언어에서 MySQL로 데이터베이스 조작

11694 단어 공사.
태그:엔지니어링
컴파일 환경
필요 헤더 파일#include 명령행 컴파일, 아래 명령 사용
gcc test.c -o test  -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 

Linux 환경에서 Makefile 파일에 매개변수 쓰기 가능
#Makefile      6 ,         。
OBJS = yhsw.o tea_c.o tea_util_c.o

CC = gcc

CFLAGS=-Wall $(shell mysql_config  --libs)  $(shell mysql_config  --cflags)
#CFLAGS+=-lm

phone_auth:$(OBJS)
    $(CC) $(OBJS) -o phone_auth -lm  $(CFLAGS)

yhsw.o:yhsw.c yhsw.h tea_util_c.h
    $(CC) $(CFLAGS) -c yhsw.c
tea_c.o:tea_c.c tea_util_c.h
    $(CC) $(CFLAGS) -c tea_c.c
tea_util_c.o:tea_util_c.c tea_util_c.h
    $(CC) $(CFLAGS) -c tea_util_c.c
clean:
    rm *.o
    rm phone_auth

윈도우즈에서 이 몇 줄의 사전 컴파일을 추가할 수 있다고 한다
#if defined(_WIN32) || defined(_WIN64)//    windows      
#include 
#endif

시스템 라이브러리의 구조체
헤더 파일 아래에 데이터베이스에 관한 구조체가 포함되어 있어 실례화된 후에 사용할 수 있다.
st_mysql/MYSQL
typedef struct st_mysql {
    NET net; /* Communication parameters */
    gptr connector_fd; /* ConnectorFd for SSL */
    char *host,*user,*passwd,*unix_socket,
     *server_version,*host_info,*info,*db;
    unsigned intport,client_flag,server_capabilities;
    unsigned intprotocol_version;
    unsigned intfield_count;
    unsigned intserver_status;
    unsigned long thread_id; /* Id for connection in server */
    my_ulonglong affected_rows;
    my_ulonglong insert_id; /* id if insert on table with NEXTNR */
    my_ulonglong extra_info; /* Used by mysqlshow */
    unsigned long packet_length;
    enum mysql_status status;
    MYSQL_FIELD *fields;
    MEM_ROOT field_alloc;
    my_bool free_me; /* If free in mysql_close */
    my_bool reconnect; /* set to 1 if automatic reconnect */
    struct st_mysql_options options;
    char scramble_buff[9];
    struct charset_info_st *charset;
    unsigned intserver_language;
} MYSQL;

st_mysql_res/MYSQL_RES
이 구조는 조회 (SELECT, SHOW, DESCRIBE, EXPLAIN) 의 귀환 결과를 나타낸다.되돌아오는 데이터를 '데이터 집합' 이라고 하는데, 이를 통해 데이터베이스에서 데이터를 읽는다.
typedef struct st_mysql_res {
    my_ulonglong row_count;
    unsigned intfield_count, current_field;
    MYSQL_FIELD *fields;
    MYSQL_DATA *data;
    MYSQL_ROWS *data_cursor;
    MEM_ROOT field_alloc;
    MYSQL_ROW row; /* If unbuffered read */
    MYSQL_ROW current_row; /* buffer to current row */
    unsigned long *lengths; /* column lengths of current row */
    MYSQL *handle; /* for unbuffered reads */
    my_bool eof; /* Used my mysql_fetch_row */
} MYSQL_RES;

상용 함수
mysql_init
함수 기능: MYSQL 구조 함수 원형을 획득하거나 초기화: MYSQL *mysql_init(MYSQL *mysql) 함수 반환값: 초기화된 MYSQL* 핸들 비고: 메모리가 부족한 상황에서 NULL로 반환
mysql_close
함수 기능: 서버 연결을 닫고 연결과 관련된 메모리 함수 원형을 방출합니다: void mysql_close(MYSQL *mysql) 함수 전송 값: MYSQL: 형식의 바늘 함수 반환 값: 없음
mysql_connect
함수 기능: MySQL 서버 함수 원형 연결: MYSQL * mysql_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd); 함수 입력 값:mysql는 현존 mysql 구조의 주소host를 나타낸다. MYSQL 서버의 호스트 이름이나 IPuser는 로그인한 사용자 이름passwd을 나타내고 로그인한 비밀번호를 나타낸다.
함수 반환값: 연결이 성공하면 MYSQL * 연결 핸들;연결이 실패하면 NULL 참고: 이 함수는 권장되지 않습니다. 대신 mysql_real_connect()mysql_real_connect
함수 기능: MySQL 서버 함수 원형 연결: MYSQL *mysql_real_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned int client_flag); 함수 입력 값:mysql 현존 mysql 구조의 주소host는 MYSQL 서버의 호스트 이름이나 IPuser를 나타낸다. 로그인한 사용자 이름passwd을 표시한다. 로그인한 비밀번호db를 표시한다. 연결할 데이터베이스port를 표시한다. MySQL 서버의 TCP/IP 포트unix_socket를 표시한다. 연결 유형client_flag을 표시한다. MySQL이 ODBC 데이터베이스를 실행하는 것을 표시한다.
함수 반환값: 연결이 성공하면 1 MYSQL* 연결 핸들: 연결이 실패하면 NULL
mysql_affected_rows
함수 기능: 최신 UPDATE, DELETE 또는 INSERT 조회의 영향을 받은 줄 함수 원형: int mysql_affected_rows(MYSQL* mysql) 함수 입력 값: MYSQL* 함수 반환 값: 실행이 성공하면 영향을 받은 줄의 수를 반환합니다.마지막 검색에 실패하면 함수는 -1을 되돌려줍니다.
mysql_query
함수 기능: 지정한 연결에 대한 검색 함수 원형: int mysql_query(MYSQL *mysql, const char *query); 함수 전송 값: query는 실행된 SQL 문장을 표시하고 마지막에 점수 함수 반환 값을 추가할 필요가 없습니다. 검색이 성공하면 0이고 오류가 0이 아닙니다.관련 함수: int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)mysql_use_result
함수 기능: 버퍼가 없는 결과 집합을 위한 결과 식별자 함수 원형: MYSQL_RES *mysql_use_result(MYSQL *mysql); 함수 전송 값: MYSQL* 함수 반환 값: MYSQL_RES*, 오류가 발생하면 NULL로 보내기
mysql_fetch_row
함수 기능: 한 결과가 집합된 다음 줄의 함수 원형을 검색합니다: MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); 함수 전송 값: MYSQL_RES* 함수 반환 값: 다음 줄의 MYSQL_RES*.검색할 수 있는 행이 더 없거나 오류가 발생하면 NULL
mysql_num_fields
함수 기능: 지정한 결과 집중열의 수량 함수 원형을 되돌려줍니다: unsigned int mysql_num_fields(MYSQL_RES *res); 함수 전송 값: MYSQL_RES* 함수 반환 값: 결과 집합 중 필드 수량의 무기호 정수
mysql_create_db
함수 기능: 데이터베이스 함수 원형을 만듭니다. int mysql_create_db(MYSQL *mysql,const char *db); 함수 전송 값:MYSQL_RES*db 만들 데이터베이스 이름
함수 반환값: 데이터베이스가 성공적으로 만들어지면 0을 반환하고 오류가 발생하면 0이 아닙니다.
mysql_select_db
함수 기능: 데이터베이스 함수 원형을 선택: int mysql_select_db(MYSQL *mysql,const char *db); 함수 전송 값:MYSQL*db 만들 데이터베이스 이름
함수 반환값: 데이터베이스가 성공적으로 만들어지면 0을 반환하고 오류가 발생하면 0이 아닙니다.
EXAMPLE
이곳의 대부분 코드는 MySQL 발행 패키지 안의 것을 참고하였다.c 소스 파일.다음 코드는 로컬 MySQL 서버에 9tmd 연결하는 것을 실현합니다.bbs_utf8 데이터베이스, 데이터 테이블 tbb 에서사용자가 입력한 userid에 따라 사용자의 사용자 이름을 가져와 터미널에 출력합니다.
#include 
#include 
#include 

int main() {
    MYSQL *t_mysql;
    MYSQL_RES *res;
    MYSQL_FIELD *fd;
    MYSQL_ROW row;
    char select[] = "select * from ca_device where mac = '58:69:6C:32:F9:1C'";

    printf("start init
"
); t_mysql = mysql_init(NULL); if(t_mysql == NULL) { printf("init failed
"
); return 1; } printf("start connect
"
); if(mysql_real_connect(t_mysql, "88.88.88.88", "username", "password", "dbname", 0, NULL, 0) == NULL) { printf("connect failed
"
); return 1; } printf("start select
"
); if(mysql_real_query(t_mysql, select, strlen(select))) { printf("insert failed
"
); return 1; } if(!(res = mysql_store_result(t_mysql))) { printf("store failed
"
); return 1; } int col = mysql_num_fields(res), i; printf("number of fields returned: %d
"
, col); int sum = 10; while(row = mysql_fetch_row(res)) { for(i = 0;i < col;i++) printf("%s ", row[i]); printf("
"
); if(sum-- == 0) break; } // 10 mysql_close(t_mysql); return 0; }

좋은 웹페이지 즐겨찾기