Почему mysql_num_rows возвращает ноль? - PullRequest
1 голос
/ 02 августа 2009

Я использую C MySQL API

int numr=mysql_num_rows(res);

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

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

Ответы [ 4 ]

4 голосов
/ 02 августа 2009

Просто предположение:

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

(из руководства mysql )

2 голосов
/ 02 августа 2009

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

Вы не разместили здесь запрос, который выполняете, а затем присвойте результат своей переменной res , поэтому мы не можем его проверить.

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

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

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

Спасибо

0 голосов
/ 12 февраля 2015

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

`

0 голосов
/ 03 августа 2009

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

SELECT COUNT(*) FROM table_name

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...