2009-08-02 173 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); 

`