yum install mysql-devel(CentOS/RHEL)或 apt-get install libmysqlclient-dev(Debian/Ubuntu)。/usr/include/mysql/ 與 /usr/lib64/mysql/。#include <mysql/mysql.h>
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main() {
// 連線參數
const char* host = "127.0.0.1";
const char* user = "db_user";
const char* pass = "db_pass";
const char* db = "test_db";
unsigned int port = 3306;
// 1. 初始化 MYSQL 物件
MYSQL* conn = mysql_init(nullptr);
if (!conn) {
cerr << "mysql_init() failed" << endl;
return EXIT_FAILURE;
}
// 2. 建立連線(啟用自動重連)
my_bool reconnect = 1;
mysql_options(conn, MYSQL_OPT_RECONNECT, &reconnect);
if (!mysql_real_connect(conn, host, user, pass, db, port, nullptr, 0)) {
cerr << "Connect failed: " << mysql_error(conn) << endl;
mysql_close(conn);
return EXIT_FAILURE;
}
cout << "Connected to MySQL " << mysql_get_server_info(conn) << endl;
// 3. 設定字元集(防止中文亂碼)
if (mysql_set_character_set(conn, "utf8mb4")) {
cerr << "Charset set failed: " << mysql_error(conn) << endl;
}
// 4. 執行查詢
const char* sql = "SELECT id, name, email FROM users LIMIT 10";
if (mysql_query(conn, sql)) {
cerr << "Query failed: " << mysql_error(conn) << endl;
} else {
MYSQL_RES* res = mysql_store_result(conn);
if (res) {
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
// row[0]=id, row[1]=name, row[2]=email
cout << "ID: " << (row[0] ? row[0] : "NULL")
<< " | Name: " << (row[1] ? row[1] : "NULL")
<< " | Email: " << (row[2] ? row[2] : "NULL") << endl;
}
mysql_free_result(res);
}
}
// 5. 執行更新(INSERT/UPDATE/DELETE)
const char* insert_sql = "INSERT INTO users(name,email) VALUES('Alice','alice@example.com')";
if (mysql_query(conn, insert_sql)) {
cerr << "Insert failed: " << mysql_error(conn) << endl;
} else {
cout << "Inserted rows: " << mysql_affected_rows(conn)
<< " | Last Insert ID: " << mysql_insert_id(conn) << endl;
}
// 6. 釋放資源
mysql_close(conn);
return EXIT_SUCCESS;
}
# 使用 mysql_config 自動獲取編譯參數(推薦)
g++ -std=c++17 -o mysql_demo mysql_demo.cpp $(mysql_config --cflags --libs)
# 或手動指定(視安裝路徑調整)
g++ -std=c++17 -o mysql_demo mysql_demo.cpp \
-I/usr/include/mysql \
-L/usr/lib64/mysql -lmysqlclient
| 函數 | 用途 | 備註 |
|---|---|---|
| mysql_init() | 初始化 MYSQL 結構 | 傳 nullptr 自動分配 |
| mysql_real_connect() | 建立真實連線 | 支援 SSL、壓縮、壓縮協議 |
| mysql_set_character_set() | 設定連線字元集 | 建議 utf8mb4 |
| mysql_query() | 執行 SQL 語句 | 成功返回 0 |
| mysql_store_result() | 取得完整結果集(緩衝模式) | 大結果集建議 mysql_use_result() |
| mysql_fetch_row() | 逐行取得資料 | 返回 MYSQL_ROW (char**) |
| mysql_free_result() | 釋放結果集記憶體 | 必須成對呼叫 |
| mysql_affected_rows() | 影響行數 | INSERT/UPDATE/DELETE 適用 |
| mysql_insert_id() | 取得 AUTO_INCREMENT 值 | 僅對上一條 INSERT 有效 |
| mysql_close() | 關閉連線並釋放資源 | 程式結束前必呼叫 |
MYSQL_STMT 防止 SQL 注入、提升重複執行效能。mysqlpp、soci、cppconn)。mysql_errno()、mysql_sqlstate() 區分錯誤類型。掌握 C API 基礎,再配合現代 C++ 封裝,即可構建高效穩定的資料庫應用。