2009-08-02 193 views
1

我正在使用C API的MySQL为什么mysql_num_rows返回零?

int numr=mysql_num_rows(res); 

它总是返回零,但在我的表有4行的存在。但是,我正在获取正确的字段数。

是什么问题?我做错了什么?

+2

是 “mysql_num_rows” 一个PHP的事情吗?这绝对不是在那里的任何C运行时。如果是PHP函数,则应包含该信息。 – 2009-08-02 09:22:39

+2

发布此之前的代码,它创建了结果。 – 2009-08-02 09:22:42

+1

您能否将整个代码展示出来?问题不在显示的行上。 – 2009-08-02 09:22:50

回答

2

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

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

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

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

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

感谢

4

只是一个猜测:

如果使用mysql_use_result()mysql_num_rows()而不是以前的结果集中的所有行已经被检索返回正确的值。

(从mysql manual

0

如果你只是想算表中的行数,说

SELECT COUNT(*) FROM table_name 

你会在包含单列拿回一列回答。

0

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

`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); 

`

相关问题