首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C 語言連接 MySQL 資料庫完整指南

     編輯:關於C語言

環境準備

在 Linux 系統上開發 MySQL C API 應用程式,需安裝客戶端開發套件 libmysqlclient (通常隨 mysql-devel 套件提供)。

安裝步驟 (以 CentOS/RHEL 為例)

# 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;
}

關鍵 API 流程總結

  1. mysql_init() 初始化連線控制結構
  2. mysql_real_connect() 建立實際 TCP 連線並認證
  3. mysql_query() 送出 SQL 指令
  4. mysql_store_result() 取得完整結果集 (緩衝模式)
  5. mysql_fetch_row() 逐列讀取資料
  6. mysql_free_result() 釋放結果集記憶體
  7. mysql_close() 關閉連線

常見問題排查

  • 標頭檔找不到:確認 -I 路徑正確,或建立軟連結 ln -s /usr/include/mysql /usr/local/include/mysql
  • 連結錯誤 undefined reference:確認 -L 與 -l 參數,檢查 libmysqlclient.so 是否存在
  • 執行時找不到共享庫:設定 LD_LIBRARY_PATH 或執行 ldconfig 更新快取
  • 中文亂碼:務必執行 SET NAMES 'utf8' (或 utf8mb4)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved