ホームページ  >  記事  >  データベース  >  MySQL 入門: C 言語を使用して MySQL を操作する

MySQL 入門: C 言語を使用して MySQL を操作する

黄舟
黄舟オリジナル
2017-01-19 15:49:282379ブラウズ

基本概念

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 サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。