我用的是mysql
不知道为什么n=mysql_field_count(&mysql)返回的n值一直是1。
下面是那一段代码(前面的connect和query都是没有问题的)
 res=mysql_use_result(&mysql);      n=mysql_field_count(&mysql);
         //n=100;
      printf("n=%d\n",n);
      for(r=0;r<n;r++){
                      row=mysql_fetch_row(res);
                      lengths=mysql_fetch_lengths(res);
                      if(row<0)  {printf("break\n"); break;}
                      for(t=0;t<mysql_num_fields(res);t++){
                                     printf("%s   ",row[t]);
                      }
                     printf("\n");
      }
这样子显示的结果只有查询的第一条。
如果是将这一行 n=mysql_field_count(&mysql);去掉,而直接用下面的一行n=100;来给n赋值,可以显示100条查询结果。
我现在就是要得到查询到结果的记录条数,请高手帮忙。我看书上也是用mysql_field_count()来查询的,为什我这里不行??

解决方案 »

  1.   

    The normal use of this function is when mysql_store_result() returned NULL (and thus you have no result set pointer). In this case, you can call mysql_field_count() to determine whether mysql_store_result() should have produced a nonempty result. http://dev.mysql.com/doc/refman/5.1/en/mysql-field-count.html
      

  2.   

    没细看你的代码,下面是手册中的例子。MYSQL_RES *result;
    unsigned int num_fields;
    unsigned int num_rows;if (mysql_query(&mysql,query_string))
    {
        // error
    }
    else // query succeeded, process any data returned by it
    {
        result = mysql_store_result(&mysql);
        if (result)  // there are rows
        {
            num_fields = mysql_num_fields(result);
            // retrieve rows, then call mysql_free_result(result)
        }
        else  // mysql_store_result() returned nothing; should it have?
        {
            if(mysql_field_count(&mysql) == 0)
            {
                // query does not return data
                // (it was not a SELECT)
                num_rows = mysql_affected_rows(&mysql);
            }
            else // mysql_store_result() should have returned data
            {
                fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
            }
        }
    }
      

  3.   

    用这个获取结果集的行数
    mysql_num_rows(MYSQL_RES*)
      

  4.   

    函数mysql_store_result()与mysql_use_result()类似,它们都有连接处理程序参数,并返回结果集。但实际上两者间的区别还是很大的。两个函数之间首要的区别在于从服务器上检索结果集的行。当调用时,mysql_store_result()立即检索所有的行,而 mysql_use_result()启动查询,但实际上并未获取任何行,mysql_store_result()假设随后会调用 mysql_fetch_row()检索记录。这些行检索的不同方法引起两者在其他方面的不同。本节加以比较,以便了解如何选择最适合应用程序的方法。       当mysql_store_result()从服务器上检索结果集时,就提取了行,并为之分配内存,存储到客户机中,随后调用 mysql_fetch_row()就再也不会返回错误,因为它仅仅是把行脱离了已经保留结果集的数据结构。mysql_fetch_row()返回 NULL始终表示已经到达结果集的末端。相反,mysql_use_result()本身不检索任何行,而只是启动一个逐行的检索,就是说必须对每行调用 mysql_fetch_row()来自己完成。既然如此,虽然正常情况下,mysql_fetch_row()返回NULL仍然表示此时已到达结果集的末端,但也可能表示在与服务器通信时发生错误。可通过调用mysql_errno()和mysql_error()将两者区分开来。       与mysql_use_result()相比,mysql_store_result()有着较高的内存和处理需求,因为是在客户机上维护整个结果集,所以内存分配和创建数据结构的耗费是非常巨大的,要冒着溢出内存的危险来检索大型结果集,如果想一次检索多个行,可用 mysql_use_result()。mysql_use_result()有着较低的内存需求,因为只需给每次处理的单行分配足够的空间。这样速度就较快,因为不必为结果集建立复杂的数据结构。另一方面,mysql_use_result()把较大的负载加到了服务器上,它必须保留结果集中的行,直到客户机看起来适合检索所有的行。这就使某些类型的客户机程序不适用mysql_use_result():■在用户的请求下提前逐行进行的交互式客户机程序(不必仅仅因为用户需要喝杯咖啡而让服务器等待发送下一行)。■在行检索之间做了许多处理的客户机程序。在所有这些情况下,客户机程序都不能很快检索结果集的所有行,它限制了服务器,并对其他客户机程序产生负面的影响,因为检索数据的表在查询过程中是读锁定的。要更新表的客户机或要插入行的任何客户机程序都被阻塞。附:在使用mysql_query()进行一个查询后,一般要用这两个函数之一来把结果存到一个MYSQL_RES *变量中。两者的主要区别是,mysql_use_result()的结果必须“一次性用完”,也就是说用它得到一个result后,必须反复用 mysql_fetch_row()读取其结果直至该函数返回null为止,否则如果你再次进行mysql查询,会得到“Commands out of sync; you can’t run this command now”的错误。而mysql_store_result()得到result是存下来的,你无需把全部行结果读完,就可以进行另外的查询。比如你进行一个查询,得到一系列记录,再根据这些结果,用一个循环再进行数据库查询,就只能用mysql_store_result()。