基本概念
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 Pass 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): Functionscramble_323':
C++ ダイナミック ライブラリを使用する必要があります。 - コンパイル オプション lstdc++ オプション内
質問 2
/usr/lib64/mysql//libmysqlclient.a(dso_dlfcn.o): 関数 dlfcn_globalllookup' 内:
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): dladdr への未定義の参照
dso_dlfcn.c:(.text+0x101): dlerror'
/usr/lib64/mysql//libmysqlclient への未定義の参照。 a(dso_dlfcn.o ): functiondlfcn_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/B UILD/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/ビルド/mysqlcom-pro-5.6.20/mysqlcom- pro-5.6.20/mysys/my_thr_init.c:217: pthread_mutexattr_destroy への未定義の参照
/pb2/build/sb_0-12734909-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.
[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: 未定義の参照 to Clock_gettime'
collect2: ld return 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 を始めるための C 言語操作 MySQL の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。