在 Linux 系統上開發 MySQL C API 應用程式,需安裝客戶端開發套件 libmysqlclient (通常隨 mysql-devel 套件提供)。
# RPM 安裝
rpm -ivh mysql-devel-5.1.47-4.el6.i686.rpm
# 或使用套件管理器
yum install mysql-devel
# 驗證安裝路徑
find / -name mysql.h # 通常在 /usr/include/mysql
find / -name libmysqlclient* # 通常在 /usr/lib/mysql
gcc -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient *.c -o myapp
| 參數 | 說明 |
|---|---|
-I | 指定標頭檔搜尋路徑 (大寫 i) |
-L | 指定庫檔搜尋路徑 |
-lmysqlclient | 連結動態庫 libmysqlclient.so (小寫 L) |
臨時生效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/mysql
永久生效 (寫入 ~/.bashrc):
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/mysql' >> ~/.bashrc
source ~/.bashrc
#include <stdio.h>
#include <mysql.h>
int main(int argc, char *argv[]) {
MYSQL *conn = mysql_init(NULL);
MYSQL_RES *result;
MYSQL_ROW row;
int i;
// 連線參數請依實際環境修改
if (mysql_real_connect(conn, "localhost", "root", "password", "mylibrary", 0, NULL, 0) == NULL) {
fprintf(stderr, "Connection failed: %s\n", mysql_error(conn));
return 1;
}
// 設定字元集
mysql_query(conn, "SET NAMES 'utf8'");
// 執行查詢:統計各出版社書籍數量
const char *sql = "SELECT COUNT(titleID), publName "
"FROM publishers, titles "
"WHERE publishers.publID = titles.publID "
"GROUP BY publishers.publID "
"ORDER BY publName";
if (mysql_query(conn, sql)) {
fprintf(stderr, "Query failed: %s\n", mysql_error(conn));
return 1;
}
result = mysql_store_result(conn);
if (result == NULL) {
fprintf(stderr, "Store result failed: %s\n", mysql_error(conn));
return 1;
}
printf("%d records found\n", (int)mysql_num_rows(result));
while ((row = mysql_fetch_row(result)) != NULL) {
for (i = 0; i < mysql_num_fields(result); i++) {
printf("%s\t", row[i] ? row[i] : "[NULL]");
}
printf("\n");
}
mysql_free_result(result);
mysql_close(conn);
return 0;
}
mysql_init() 初始化連線控制結構mysql_real_connect() 建立實際 TCP 連線並認證mysql_query() 送出 SQL 指令mysql_store_result() 取得完整結果集 (緩衝模式)mysql_fetch_row() 逐列讀取資料mysql_free_result() 釋放結果集記憶體mysql_close() 關閉連線-I 路徑正確,或建立軟連結 ln -s /usr/include/mysql /usr/local/include/mysql-L 與 -l 參數,檢查 libmysqlclient.so 是否存在LD_LIBRARY_PATH 或執行 ldconfig 更新快取SET NAMES 'utf8' (或 utf8mb4)