以下示範使用 MySQL C API 連線、查詢、讀取結果並釋放資源:
#include <windows.h>
#include <iostream>
#include "mysql.h" // 路徑視安裝目錄調整
int main() {
char *user = "root", *pwd = "123456", *dbname = "chardb";
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
unsigned long num_rows;
int ret;
mysql_init(&mysql);
if (mysql_real_connect(&mysql, NULL, user, pwd, dbname, 0, NULL, 0)) {
printf("連線成功!\n");
ret = mysql_query(&mysql, "select * from accounts");
if (!ret) {
printf("查詢成功!\n");
res = mysql_store_result(&mysql);
if (res) {
printf("儲存結果成功!\n");
num_rows = mysql_num_rows(res);
if (num_rows) {
printf("%lu\n", num_rows);
while ((row = mysql_fetch_row(res))) {
printf("%s\t%s\t%s\t%s\t%s\t%s\n",
row[0], row[1], row[2], row[3], row[4], row[5]);
}
}
mysql_free_result(res);
}
}
mysql_close(&mysql);
} else {
printf("連線失敗\n");
}
return 0;
}
mysql_init() 初始化 MYSQL 結構。mysql_real_connect() 建立實際連線。mysql_query() 執行 SQL 陳述式。mysql_store_result() 取得完整結果集 (緩衝模式)。mysql_num_rows() / mysql_fetch_row() 遍歷資料列。mysql_free_result() 釋放結果集記憶體。mysql_close() 關閉連線,**所有路徑 (成功/失敗/提前返回) 都必須呼叫**。第二段程式碼在每個 exit 前均呼叫 mysql_close(),避免連線洩漏。實務上建議以 RAII 包裝 MYSQL 與 MYSQL_RES,確保例外安全。
libmysql.lib (Windows) 或 -lmysqlclient (Linux)。include。libmysql.dll 在 PATH 或程式目錄。