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