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

CentOS 6.4 下 C 語言連接 MySQL 完整指南:初始化、查詢、錯誤處理與編譯鏈接

     編輯:關於C語言

在 Linux 環境下使用 C 語言操作 MySQL 資料庫,核心流程為:初始化連線控制結構 → 建立實際連線 → 執行 SQL → 處理結果/錯誤 → 關閉連線。本文針對 CentOS 6.4 (64 位元) 環境,提供完整編譯鏈接參數、連線管理、錯誤處理、非查詢與查詢型 SQL 執行範例,並解決 mysqlclient 庫路徑找不到的常見問題。

核心 API 流程

  1. mysql_init(MYSQL*):分配/初始化 MYSQL 結構,傳 NULL 回傳新指標。
  2. mysql_real_connect():提供主機、用戶、密碼、資料庫、埠、Socket、旗標等參數建立 TCP/Unix Socket 連線。
  3. mysql_query() / mysql_real_query():執行 SQL 字串(無結尾分號),二進位資料用後者。
  4. mysql_store_result() / mysql_use_result():取得結果集(SELECT/SHOW/DESCRIBE)。
  5. mysql_fetch_row():逐列取得資料。
  6. mysql_free_result():釋放結果集記憶體。
  7. mysql_affected_rows():INSERT/UPDATE/DELETE 影響列數。
  8. mysql_errno() / mysql_error():取得錯誤碼與訊息。
  9. mysql_close():關閉連線並釋放結構(若由 mysql_init(NULL) 配置)。

編譯鏈接關鍵:64 位元庫路徑

# 錯誤:找不到 -lmysqlclient
gcc -I/usr/include/mysql connect.c -L/usr/lib/mysql -lmysqlclient -o connect

# 正確:CentOS 6.4 64位庫在 /usr/lib64/mysql
gcc -I/usr/include/mysql connect.c -L/usr/lib64/mysql -lmysqlclient -o connect

原則:-L 必須指向對應架構的庫目錄(lib64 而非 lib)。

完整範例:連線、插入、錯誤處理

#include <stdlib.h>
#include <stdio.h>
#include <mysql.h>

int main() {
    MYSQL mysql_conn;
    mysql_init(&mysql_conn);                    // 非動態分配結構

    if (mysql_real_connect(&mysql_conn, "localhost", "root", "yao", "test", 0, NULL, 0)) {
        printf("連線成功\n");

        int res = mysql_query(&mysql_conn,
            "INSERT INTO child(childid, age, name) VALUES (1, 12, 'bing')");
        if (!res) {
            printf("插入 %lu 筆資料\n",
                (unsigned long)mysql_affected_rows(&mysql_conn));
        } else {
            fprintf(stderr, "插入失敗 %d: %s\n",
                mysql_errno(&mysql_conn), mysql_error(&mysql_conn));
        }
        mysql_close(&mysql_conn);
    } else {
        fprintf(stderr, "連線失敗\n");
        if (mysql_errno(&mysql_conn)) {
            fprintf(stderr, "錯誤 %d: %s\n",
                mysql_errno(&mysql_conn), mysql_error(&mysql_conn));
        }
    }
    return 0;
}

連線選項 mysql_options()(僅能在 init 與 connect 之間呼叫)

選項參數型別說明
MYSQL_OPT_CONNECT_TIMEOUTconst unsigned int*連線逾時秒數
MYSQL_OPT_COMPRESSNULL啟用壓縮協定
MYSQL_INIT_COMMANDconst char*連線建立後自動執行的 SQL

非動態分配 vs 動態分配連線結構

方式程式碼釋放責任
動態MYSQL* conn = mysql_init(NULL);mysql_close(conn) 釋放結構
非動態MYSQL conn; mysql_init(&conn);mysql_close(&conn) 僅關閉連線,結構在堆疊自動銷毀

非動態分配避免 malloc 失敗風險,適合嵌入式/高可靠場景。

常見陷阱與最佳實踐

  • SQL 注入:嚴禁直接拼接使用者輸入,請使用 mysql_stmt_prepare() 參數化查詢(Prepared Statements)。
  • 字元集:連線後執行 SET NAMES utf8mb4 確保中文正確存取。
  • 重連機制:長連線需啟用 MYSQL_OPT_RECONNECT 或自行實作心跳檢查。
  • 結果集記憶體:mysql_store_result() 將全表載入記憶體,大結果集請改用 mysql_use_result() 串流讀取。
  • 執行緒安全:MYSQL 結構非執行緒安全,每執行緒獨立建立連線。

總結

掌握 mysql_init → real_connect → query → error/result → close 標準流程,正確指定 -L/usr/lib64/mysql,並建立錯誤處理習慣,即可在 CentOS 上穩健開發 C/MySQL 應用。後續可進階學習預處理語句、連線池、非同步介面以提升效能與安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved