我使用MySQL C API查询数据库,结果存储在MySQL_行类型中。我可以用

printf("%s", row[0]);

但是,根据MySQL C API文档,我不能将它们用作以空结尾的字符串。
the function overview的底部,他们说我可以用mysql_store_result()mysql_use_result()来“提取”信息。然而,我仍然对这是如何做到的感到困惑。
理想情况下,我希望将结果作为字符串使用,这样我就可以执行类似strcmp的操作,但在其他情况下,我肯定需要在这两个函数中以某种方式使用信息。
有人能给我示范一下怎么做吗?

最佳答案

基本上,您可以调用mysql_store_result()或mysql_use_result()来访问结果集,前者将所有行加载到客户端的内存中,后者从服务器一次访问一行。如果使用mysql_use_result(),则需要调用mysql_fetch_row()来访问每一行,直到函数返回空值。每次成功调用mysql_fetch_row()都会返回一个mysql_row,您可以使用它访问各个字段值。
由于字段不是以nul结尾的,因此需要使用mysql_fetch_lengths()来获取每个字段的长度,以便可以通过memcpy等将它们复制到其他地方。
由于字段值不是以nul结尾的,因此如果要将其用作字符串,则在复制时需要添加自己的nul字符。请注意,字段值可能包含二进制数据,因此如果您将其视为字符串,则期望C字符串的函数将在数据中遇到nul字符时停止处理数据。
以下是文档中的一个示例,可以帮助您将所有这些放在一起:

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");
}

10-07 19:12
查看更多