mysql_num_rows总是返回0

时间:2016-01-06 19:04:54

标签: c++ mysql

我使用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

2 个答案:

答案 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));