2008-11-07 123 views
2

我正在使用MySQL C API来查询数据库,并将结果存储在MYSQL_ROW类型中。我能够将结果打印到控制台,但是根据MySQL C API文档,我不能使用它们作为以空字符结尾的字符串。但是,根据MySQL C API文档,我不能使用它们作为以空字符结尾的字符串。MySQL C API使用结果

the function overview的底部,他们说我可以用mysql_store_result()mysql_use_result()“提取”信息。但是,我仍然对这是如何完成感到困惑。

理想情况下,我想使用结果作为一个字符串,所以我可以做的东西一样strcmp,但否则我一定要与这两个函数以某种方式使用的信息。

有人可以告诉我一个如何做到这一点的例子吗?

回答

4

基本上,您调用mysql_store_result()或mysql_use_result()来访问结果集,前者将所有行装载到客户端的内存中,后者从服务器一次访问一行。如果你使用mysql_use_result(),你需要调用mysql_fetch_row()来访问每一行,直到函数返回NULL。每次成功调用mysql_fetch_row()都会返回一个MYSQL_ROW,您可以使用它来访问各个字段值。

由于字段是不是空终止的,你需要使用mysql_fetch_lengths()来获得每个字段的长度,这样就可以通过memcpy的其他地方复制它们,等

由于字段值如果你想将它作为一个字符串使用,你将需要添加你自己的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"); 
} 
+0

感谢,所以我可以得到的长度,但是如果我要得到的东西,被存储为VARCHAR数据库?这是否意味着我不能在结果中使用strcmp? – Steve 2008-11-07 01:24:36