MySQL 提供 C 語言客戶端庫 (libmysqlclient),封裝連接管理、查詢構建、結果處理、錯誤報告。本文按「最小框架 → 錯誤處理 → 模塊化 → 運行時參數」四步演進,構建可復用客戶端骨架。
mysql.h、庫文件 libmysqlclient.a/.so/.libsudo apt install libmysqlclient-dev / yum install mysql-devel# 編譯 gcc -c -I/usr/local/mysql/include client.c -o client.o # 鏈接 gcc client.o -L/usr/local/mysql/lib -lmysqlclient -o client # 需數學庫時 gcc client.o -L/usr/local/mysql/lib -lmysqlclient -lm -o client
多源文件時列出所有 .o;Solaris 需 -lsocket -lnsl。
CC = gcc CFLAGS = -I/usr/local/mysql/include LDFLAGS = -L/usr/local/mysql/lib -lmysqlclient OBJS = main.o aux.o myclient: $(OBJS) $(CC) $(OBJS) $(LDFLAGS) -o myclient %.o: %.c myclient.h $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f *.o myclient
mysql_init() → mysql_real_connect() → mysql_close()。mysql_error() 獲取信息,mysql_errno() 獲取代碼。connect_db()、disconnect_db(),頭文件暴露接口。argc/argv、環境變量、配置文件讀取 host/user/password/db/port/socket,而非硬編碼。| 階段 | 關鍵函數 | 說明 |
|---|---|---|
| 初始化 | mysql_init(MYSQL *mysql) | 分配/初始化 MYSQL 結構體 |
| 連接 | mysql_real_connect() | 建立 TCP/Unix Socket 連接,認證 |
| 查詢 | mysql_query() / mysql_real_query() | 發送 SQL,二進制數據用 real_query |
| 結果集 | mysql_store_result() / mysql_use_result() | store=緩存全量;use=流式讀取 |
| 行獲取 | mysql_fetch_row() | 返回 MYSQL_ROW (char **) |
| 字段信息 | mysql_fetch_field() / mysql_num_fields() | 獲取列名、類型、長度 |
| 釋放 | mysql_free_result() | 必須調用,否則內存洩漏 |
| 錯誤 | mysql_error() / mysql_errno() | 最近一次調用的錯誤信息/代碼 |
| 斷開 | mysql_close() | 關閉連接,釋放結構體 |
MySQL 源碼 client/ 目錄包含 mysql、mysqladmin、mysqldump 等完整客戶端實現,可直接參考/移植片段,避免重複造輪子。