Я использую C MySQL APIПочему mysql_num_rows возвращает ноль?
int numr=mysql_num_rows(res);
Он всегда возвращает ноль, но в моей таблице есть 4 строки есть. Тем не менее, я получаю правильные поля.
В чем проблема? Я делаю что-то неправильно?
Я использую C MySQL APIПочему mysql_num_rows возвращает ноль?
int numr=mysql_num_rows(res);
Он всегда возвращает ноль, но в моей таблице есть 4 строки есть. Тем не менее, я получаю правильные поля.
В чем проблема? Я делаю что-то неправильно?
Единственная причина получения нуля от mysql_num_rows(<variable_name>)
- это потому, что запрос ничего не возвращал.
Вы не отправили запрос, который вы запустили, а затем присвоили результат своей переменной res, чтобы мы не смогли ее проверить.
Но попробуйте выполнить этот точный запрос в своей БД локально через любое используемое вами программное обеспечение для управления базами данных и посмотреть, сможете ли вы добиться каких-либо результатов.
Если запрос работает нормально, то это должно быть так, как вы выполняете запрос в C, иначе ваш запрос будет нарушен.
Возможно, добавьте еще немного кода из C, где вы выполните запрос, а затем запустите его.
Благодаря
Upvoted. Похоже, что в его запросе есть предложение where, которое не соответствует чему-либо или сломано. –
только предположение:
Если вы используете
mysql_use_result()
,mysql_num_rows()
не возвращает правильное значение, пока все строки в наборе результатов не были получены.
(от mysql manual)
Если вам нужно количество строк перед вызовом mysql_fetch_row(), используйте mysql_store_result() вместо mysql_use_result(). – chazomaticus
Если вы просто хотите, чтобы подсчитать количество строк в таблице, говорят
SELECT COUNT(*) FROM table_name
вы получите обратно один столбец в одной строке, содержащей ответ.
У меня тоже есть эта проблема. Но я заметил, что 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);
`
Является ли "mysql_num_rows" РНР вещь? Это определенно не в какой-то C-среде. Если это функция PHP, вы должны включить эту информацию. –
опубликуйте код, который был до этого, который создал результат. –
Можете ли вы, пожалуйста, показать код целиком? Проблема не в отображаемой строке. –