连接与初始化
在 C/C++ 中操作 MySQL,首先要处理好连接句柄的生命周期。mysql_init() 用于初始化连接结构体,如果传入 NULL,它会自动分配一个新的句柄,记得最后用 mysql_close() 释放。
MYSQL *mysql = mysql_init(NULL);
if (mysql == nullptr) {
// 处理内存分配失败
}
// ... 使用完毕后
mysql_close(mysql);
建立实际连接时,使用 mysql_real_connect()。这个函数参数较多,但核心是主机、用户、密码和数据库名。成功返回句柄,失败则返回 NULL,此时应调用 mysql_error() 查看具体原因。
MYSQL *conn = mysql_real_connect(mysql, "localhost", "root", "password", "test_db", 3306, NULL, 0);
if (conn == nullptr) {
fprintf(stderr, "%s\n", mysql_error(mysql));
}
执行 SQL 语句
执行 SQL 主要有两个接口:mysql_query() 和 mysql_real_query()。前者适合常规字符串,后者支持包含二进制数据或需要显式指定长度的场景。对于大多数 SELECT、INSERT 操作,mysql_query() 足够好用,返回 0 表示成功。
int ret = mysql_query(conn, "SELECT * FROM users WHERE id = 1");
if (ret != 0) {
// 执行失败处理
}
处理查询结果
拿到结果集后,有两种策略:mysql_store_result() 一次性加载到内存,适合中小数据量;mysql_use_result() 逐行读取,内存占用低,但必须在读完所有行前不能执行其他语句。
MYSQL_RES *res = mysql_store_result(conn);
if (res == nullptr) {
// 获取结果失败
;
}

