首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL C API 客戶端程式開發(二):完善錯誤檢查與連接參數運行時獲取

     編輯:MySQL 資料庫相關知識

為何必須檢查錯誤?

忽略 API 回傳值會導致靜默失敗,除錯極度困難。MySQL C API 兩類回傳慣例:

  • 指標函數:成功回傳非 NULL,失敗回傳 NULL(如 mysql_init()、mysql_real_connect())。
  • 整數函數:成功回傳 0,失敗回傳非 0(勿檢查特定非 0 值,僅判斷 != 0)。

錯誤資訊獲取

  • mysql_error():人類可讀錯誤字串(優先顯示給用戶)。
  • mysql_errno():數值錯誤碼(供程式邏輯判斷)。
  • **必須在緊接失敗的 API 呼叫後立即調用**,後續 API 呼叫會覆蓋錯誤資訊。

客戶端程式 2 完整碼(含錯誤檢查)

#include 
#include 
#include 

#define HOST "localhost"
#define USER "root"
#define PASS "secret"
#define DB   "test"

int main() {
  MYSQL *conn = mysql_init(NULL);
  if (!conn) {
    fprintf(stderr, "mysql_init() failed\n");
    return EXIT_FAILURE;
  }

  if (!mysql_real_connect(conn, HOST, USER, PASS, DB, 0, NULL, 0)) {
    fprintf(stderr, "Connection failed: %s (errno=%d)\n",
            mysql_error(conn), mysql_errno(conn));
    return EXIT_FAILURE;
  }

  printf("Connected successfully\n");
  mysql_close(conn);
  return EXIT_SUCCESS;
}

常見錯誤與對策

  • Access denied:檢查主機/用戶/密碼、mysql.user 權限表、skip-grant-tables 是否誤開。
  • 連線參數**勿硬編碼**於二進制檔(strings 指令即可提取),改用配置檔、環境變數或命令列參數運行時注入。

下一步:客戶端程式 4 — 運行時獲取連接參數

透過 argc/argv、getopt()、配置檔解析(my_print_defaults)動態獲取連線資訊,實現安全部署。

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