我正在使用 MySQL C API 来查询数据库,并将结果存储在 MYSQL_ROW 类型中。我可以将结果打印到控制台
printf("%s", row[0]);
Run Code Online (Sandbox Code Playgroud)
但是,根据 MySQL C API 文档,我不能将它们用作以 null 结尾的字符串。
在功能概述的底部,他们说我可以使用mysql_store_result()
或来“提取”信息mysql_use_result()
。但是,我仍然对这是如何完成的感到困惑。
理想情况下,我想将结果用作字符串,以便我可以执行类似的操作strcmp
,但否则我肯定需要以某种方式将这些信息与这两个函数一起使用。
有人可以向我展示如何执行此操作的示例吗?
基本上,您调用 mysql_store_result() 或 mysql_use_result() 来访问结果集,前者将所有行加载到客户端的内存中,后者从服务器一次访问一行。如果使用mysql_use_result(),则需要调用mysql_fetch_row()来访问每一行,直到函数返回NULL。每次成功调用 mysql_fetch_row() 都会返回一个 MYSQL_ROW,您可以使用它来访问各个字段值。
由于字段不是以 null 结尾的,因此您需要使用 mysql_fetch_lengths() 来获取每个字段的长度,以便您可以通过 memcpy 等将它们复制到其他地方。
由于字段值不是以 null 结尾的,如果您想将其用作字符串,则在制作副本时需要添加自己的 NUL 字符。请注意,字段值可能包含二进制数据,因此,如果您确实将其视为字符串,则需要 C 字符串的函数在遇到数据中的空字符时将停止处理数据。
以下是文档中的一个示例,可以帮助您将所有这些放在一起:
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i],
row[i] ? row[i] : "NULL");
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)