为什么mysql_num_rows返回零?

时间:2009-08-02 09:19:01

标签: mysql c

我正在使用C MySQL API

int numr=mysql_num_rows(res);

它总是返回零,但在我的表中有4行。但是,我得到了正确的字段数。

有什么问题?我做错了吗?

4 个答案:

答案 0 :(得分:4)

只是一个猜测:

  

如果使用mysql_use_result()mysql_num_rows()在检索到结果集中的所有行之前不会返回正确的值。

(来自mysql manual

答案 1 :(得分:2)

mysql_num_rows(<variable_name>)收到零的唯一原因是因为查询没有返回任何内容。

您尚未在此处发布您运行的查询,然后将结果分配给 res 变量,以便我们无法检查。

但是尝试通过您使用的任何数据库管理软件在本地运行您的数据库中的确切查询,看看您是否能够取得任何结果。

如果查询工作正常,那么它必须是您在C中运行查询的方式,否则您的查询将被破坏。

也许从你进行查询的C中再发布一些代码,然后运行它。

由于

答案 2 :(得分:0)

如果您只想计算表格中的行数,请说

SELECT COUNT(*) FROM table_name

您将在包含答案的单行中找回单个列。

答案 3 :(得分:0)

我也有这个问题。但是我注意到mysql.h定义了mysql_num_rows()以返回“my_ulonglong”。同样在头文件中,您将看到my_ulonglong的类型为def。我的系统my_ulonglong的大小是8个字节。当我们尝试将其打印出来或将其转换为int时,我们可能得到前四个字节为零。但是我在my_ulonglong变量的地址打印出8个字节,并打印全部为零。所以我认为这个功能不起作用。

`my_ulonglong numOfRows;
MYSQL *resource;
MYSQL *connection;

mysql_query(connection,"SELECT * FROM channels");
resource = mysql_use_result(connection);
numChannels = mysql_num_rows(resource);
printf("Writing numChannels: %lu\n", numChannels);  // returns 0
printf("Size of numChannels is %d.\n", sizeof(numChannels)); // returns 8

// however
unsigned char * tempChar;
tempChar = (unsigned char *) &numChannels;
for (i=0; i< (int) sizeof(numChannels); ++i) {
    printf("%02x", (unsigned int) *tempChar++);
}
printf("\n");
// returned 0000000000000000 so I think its a bug.

//mysql.h  typedef for my_ulonglong and function mysql_num_rows()

#ifndef _global_h
#if defined(NO_CLIENT_LONG_LONG)
typedef unsigned long my_ulonglong;
#elif defined (__WIN__)
typedef unsigned __int64 my_ulonglong;
#else
typedef unsigned long long my_ulonglong;
#endif
#endif

my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);

`