2009-08-02 2 views
1

Я использую C MySQL APIПочему mysql_num_rows возвращает ноль?

int numr=mysql_num_rows(res); 

Он всегда возвращает ноль, но в моей таблице есть 4 строки есть. Тем не менее, я получаю правильные поля.

В чем проблема? Я делаю что-то неправильно?

+2

Является ли "mysql_num_rows" РНР вещь? Это определенно не в какой-то C-среде. Если это функция PHP, вы должны включить эту информацию. –

+2

опубликуйте код, который был до этого, который создал результат. –

+1

Можете ли вы, пожалуйста, показать код целиком? Проблема не в отображаемой строке. –

ответ

2

Единственная причина получения нуля от mysql_num_rows(<variable_name>) - это потому, что запрос ничего не возвращал.

Вы не отправили запрос, который вы запустили, а затем присвоили результат своей переменной res, чтобы мы не смогли ее проверить.

Но попробуйте выполнить этот точный запрос в своей БД локально через любое используемое вами программное обеспечение для управления базами данных и посмотреть, сможете ли вы добиться каких-либо результатов.

Если запрос работает нормально, то это должно быть так, как вы выполняете запрос в C, иначе ваш запрос будет нарушен.

Возможно, добавьте еще немного кода из C, где вы выполните запрос, а затем запустите его.

Благодаря

+1

Upvoted. Похоже, что в его запросе есть предложение where, которое не соответствует чему-либо или сломано. –

4

только предположение:

Если вы используете mysql_use_result(), mysql_num_rows() не возвращает правильное значение, пока все строки в наборе результатов не были получены.

(от mysql manual)

+1

Если вам нужно количество строк перед вызовом mysql_fetch_row(), используйте mysql_store_result() вместо mysql_use_result(). – chazomaticus

0

Если вы просто хотите, чтобы подсчитать количество строк в таблице, говорят

SELECT COUNT(*) FROM table_name 

вы получите обратно один столбец в одной строке, содержащей ответ.

0

У меня тоже есть эта проблема. Но я заметил, что mysql.h определяет mysql_num_rows(), чтобы вернуть «my_ulonglong». Также в файле заголовка вы увидите, что существует тип def для my_ulonglong. В моей системе размер 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); 

`

Смежные вопросы