#include <mysql/mysql.h>
#include <iostream>
#include <vector>
int main() {
MYSQL* conn = nullptr;
MYSQL_STMT* stmt = nullptr;
try {
// 1. 初始化连接对象
conn = mysql_init(nullptr);
if (!conn) throw "初始化连接失败";
// 2. 配置连接参数(禁用SSL)
const char* ssl_mode = "DISABLE";
mysql_optionsv(conn, MYSQL_OPT_SSL_MODE, ssl_mode);
mysql_optionsv(conn, MYSQL_SET_CHARSET_NAME, "utf8mb4");
// 3. 建立数据库连接
if (!mysql_real_connect(
conn,
"localhost", // 主机
"dev_user", // 用户名
"Test@123", // 密码
"test_db", // 数据库
3306, // 端口
nullptr, // Unix socket
CLIENT_MULTI_STATEMENTS // 客户端标志
)) throw mysql_error(conn);
// 4. 构造预处理语句
const char* sql = "INSERT INTO ai_systems (name, version) VALUES (?, ?)";
stmt = mysql_stmt_init(conn);
if (!stmt || mysql_stmt_prepare(stmt, sql, strlen(sql)))
throw mysql_error(conn);
// 5. 绑定参数
struct {
char name;
double version;
} data;
strcpy(data.name, "原生接口服务");
data.version = 1.2;
MYSQL_BIND bind = {};
bind.buffer_type = MYSQL_TYPE_STRING;
bind.buffer = data.name;
bind.buffer_length = sizeof(data.name);
bind.buffer_type = MYSQL_TYPE_DOUBLE;
bind.buffer = &data.version;
if (mysql_stmt_bind_param(stmt, bind))
throw mysql_error(conn);
// 6. 执行插入操作
if (mysql_stmt_execute(stmt))
throw mysql_error(conn);
std::cout << "✅ 插入成功,影响行数:"
<< mysql_stmt_affected_rows(stmt);
}
catch (const char* e) {
std::cerr << "❌ 错误发生: " << e;
}
catch (...) {
std::cerr << "❌ MySQL错误: " << mysql_error(conn);
}
// 7. 资源清理(C API必须手动释放)
if (stmt) mysql_stmt_close(stmt);
if (conn) {
mysql_close(conn);
mysql_library_end();
}
return 0;
}