MySQL C API 使用结果

Ste*_*eve 2 c mysql

我正在使用 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,但否则我肯定需要以某种方式将这些信息与这两个函数一起使用。

有人可以向我展示如何执行此操作的示例吗?

Rob*_*ble 5

基本上,您调用 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)