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*
연결 핸들: 연결이 실패하면 NULLmysql_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*
.검색할 수 있는 행이 더 없거나 오류가 발생하면 NULLmysql_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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어에서 MySQL로 데이터베이스 조작컴파일 환경 필요 헤더 파일#include 명령행 컴파일, 아래 명령 사용 윈도우즈에서 이 몇 줄의 사전 컴파일을 추가할 수 있다고 한다 헤더 파일 아래에 데이터베이스에 관한 구조체가 포함되어 있어 실례화된 후에 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.