我使用mysql_num_rows,此函数返回0
这是我的代码:
#include <mysql/mysql.h>
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, "", "", "", "", 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
if (mysql_query(conn, "SELECT * FROM TEST"))
{
printf("MySQL query error : %s\n", mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
printf("Rows: %d\n", mysql_num_rows(res));
while ((row = mysql_fetch_row(res)) != NULL)
printf("Row1: %s | Row2: %s | Row3: %s \n", row[0], row[1], row[2]);
mysql_free_result(res);
mysql_close(conn);
这是输出
Rows: 0
Row1: 1 | Row2: 127.0.0.1 | Row3: Raspberry
Row1: 2 | Row2: 127.0.0.1 | Row3: Raspberry
MySQL客户端版本:5.5.44
答案 0 :(得分:2)
尝试显示while循环之后的记录数,如下所示
printf("Rows: %d\n", mysql_num_rows(res));
while ((row = mysql_fetch_row(res)) != NULL)
printf("Row1: %s | Row2: %s | Row3: %s \n", row[0], row[1], row[2]);
printf("Rows: %d\n", mysql_num_rows(res));
根据documentation,当您使用mysql_use_result
时,mysql_num_rows
在之后处理完记录后才会提供正确的数字。要获得它之前需要使用mysql_store_result
。
希望这有帮助
答案 1 :(得分:1)
我通过强制转换修复了问题,并将其转换为int和mysql_store_result!
printf("Rows: %d\n", (int)mysql_num_rows(res));