기본 개념
C API는 mysqlclient 라이브러리 파일에 포함되어 있으며, 이는 MySQL 소스 코드와 함께 배포되며 데이터베이스에 연결하고 데이터베이스 쿼리를 수행하는 데 사용됩니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dlfcn.h> #include <mysql/mysql.h> int main() { int ret = 0; MYSQL mysql; MYSQL *con = NULL; con = mysql_init(&mysql); if (con == NULL) { ret = mysql_errno(&mysql); printf("func mysql_init() err :%d\n", ret); return ret; } //连接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 long client_flag) ; con = mysql_real_connect(&mysql, "localhost", "root", "123456", "mydb2", 0, NULL, 0 ); if (con == NULL) { ret = mysql_errno(&mysql); printf("func mysql_real_connect() err :%d\n", ret); return ret; } else { printf("func mysql_real_connect() ok\n"); } mysql_close(&mysql); return ret; }
프로그래밍 단계
1 mysql_library_init()를 호출하여 MYSQL 라이브러리를 초기화합니다.
2 mysql_init()를 호출하여 연결 핸들러를 초기화하고 mysql_real_connect()를 호출하여 서버에 연결합니다.
3 SQL 문 실행 및 결과 처리
4 mysql_close()를 호출하여 MYSQL 서버와의 연결을 끊습니다.
5 mysql_library_end()를 호출하여 MYSQL 라이브러리 사용을 종료합니다.
주의 사항 질문 1을 컴파일할 때:
[mysql01@localhost dm01]$ gcc -o dm11_hello dm11_hello.c -I/usr/include/ -L/usr/lib64/mysql/ -lmysqlclient
/usr/lib64/mysql/ / libmysqlclient.a(net_serv.cc.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): __gxx_personality_v0'에 대한 정의되지 않은 참조
/usr/lib64/mysql//libmysqlclient. a (password.c.o): functioncramble_323':
C++ 동적 라이브러리를 사용해야 하며, 컴파일 옵션에 -lstdc++ 옵션을 추가하세요
질문 2
/usr/lib64 /mysql/ /libmysqlclient.a(dso_dlfcn.o): dlfcn_globallookup' 함수에서:
dso_dlfcn.c:(.text+0x31): 정의되지 않은 참조 todlopen'
dso_dlfcn.c:(.text+0x44): dlsym'에 대한 정의되지 않은 참조
dso_dlfcn.c:(.text+0x4f): dlclose에 대한 정의되지 않은 참조
/usr/lib64/mysql//libmysqlclient.a(dso_dlfcn.o): dlfcn_pathbyaddr' 함수에서:
dso_dlfcn.c:(.text+0xa0): dlerror'에 대한 정의되지 않은 참조
dso_dlfcn.c:(.text+0x101): dlerror에 대한 정의되지 않은 참조
/usr/lib64/mysql//libmysqlclient.a( dso_dlfcn.o ): 함수dlfcn_bind_func'에서:
dso_dlfcn.c:(.text+0x464): `dlsym'에 대한 정의되지 않은 참조
콜백 함수의 정방향 및 역방향 호출의 경우 다음을 사용해야 합니다. dl 함수 라이브러리, 컴파일 옵션에 -ldl 옵션 추가
질문 3
thread_mutex_trylock'
/usr/lib64/mysql//libmysqlclient.a(my_thr_init.c.o): 함수 내 my_thread_global_end':
/ pb2/build/sb_0-12734909-1406113305.48/rpm/BUILD/mysqlcom-pro-5.6.20/mysqlcom-pro-5.6.20/mysys/my_thr_init.c:214: 정의되지 않은 참조 topthread_key_delete'
/pb2/build/ sb_0-12734909-1406113305.48/rpm/BUILD/mysqlcom-pro-5.6.20/mysys/my_thr_init.c:217: pthread_mutexattr_destroy에 대한 정의되지 않은 참조
/pb2/build/sb_0-127 34909 -1406113305.48/rpm/BUILD/mysqlcom-pro-5.6.20/mysqlcom-pro-5.6.20/mysys/my_thr_init.c:220: 정의되지 않은 참조 topthread_mutexattr_destroy'
MySQL의 동적 라이브러리는 멀티스레딩을 사용합니다. 컴파일 옵션에 -lpthread 옵션을 추가하세요
4. 질문 4
[mysql01@localhost dm01]$ gcc -o dm11_hello dm11_hello.c -I/usr/include/ -L/usr / lib64/mysql/ -lmysqlclient -ldl -lstdc++ -lpthread
/usr/lib64/mysql//libmysqlclient.a(my_getsystime.c.o): 함수 my_getsystime'에서:
/pb2/build/sb_0-12734909- 1406113305. 48 /rpm/BUILD/mysqlcom-pro-5.6.20/mysqlcom-pro-5.6.20/mysys/my_getsystime.c:44: clock_gettime'에 대한 정의되지 않은 참조
collect2: ld는 1을 반환합니다
[mysql01@ localhost dm01] $
런타임 동적 라이브러리 및 수학 라이브러리 누락, -lm 및 -lrt 옵션 추가
gcc 컴파일 명령 완료:
gcc -o hello hello.c - I /usr/include/mysql/ -L/usr/lib/i386-linux-gnu/ -lmysqlclient -lm -ldl -lstdc++ -lpthread -lrt
일반 Makefile 쓰기
.PHONY:clean all CC=gcc CFLAGS=-Wall -g LFLAGS=-L/usr/lib/i386-linux-gnu/ -lmysqlclient -ldl -lpthread -lm -lrt -lstdc++ BIN=hello all:$(BIN) %.o:%.c $(CC) $(CFLAGS) -c $< -o $@ hello:hello.o $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@ clean: rm -f *.o $(BIN)
위 내용은 MySQL 입문: MySQL을 구동하기 위한 C언어 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!