Ubuntu中在C编程中mysql结果集

Ubuntu中在C编程中mysql结果集怎么打印输出多行,每次输出只能输出一行

该回答引用ChatGPT
在 Ubuntu 中,如果您想在 C 编程中打印多行 mysql 结果集,可以使用 MySQL C API 中的 mysql_fetch_row 函数。该函数用于按行检索结果集中的行,并将其存储在 MYSQL_ROW 结构中。

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  MYSQL *conn;
  MYSQL_RES *res;
  MYSQL_ROW row;

  char *server = "localhost";
  char *user = "username";
  char *password = "password";
  char *database = "database_name";

  conn = mysql_init(NULL);

  if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit(1);
  }

  if (mysql_query(conn, "SELECT * FROM table_name")) {
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit(1);
  }

  res = mysql_use_result(conn);

  while ((row = mysql_fetch_row(res)) != NULL) {
    printf("%s\t%s\t%s\n", row[0], row[1], row[2]); //修改此处输出
  }

  mysql_free_result(res);
  mysql_close(conn);

  return 0;
}


以下答案引用自GPT-3大模型,请合理使用:

Adopt代码如下:
#include <stdio.h>
#include <mysql.h>
 
int main(int argc, char **argv)
{
    MYSQL *conn;
    int res;
    MYSQL_RES *result;
    MYSQL_ROW row;
 
    conn = mysql_init(NULL);
    /* Connect to database */
    if (!mysql_real_connect(conn, "localhost", "root", "password", "database", 0, NULL, 0)) 
    {
        printf("Error: %s [%d]\n", mysql_error(conn), mysql_errno(conn));
        return -1;
    }
    /* send SQL query */
    res = mysql_query(conn, "SELECT * FROM tablename");
    if (res) 
    {
        printf("Error: %s [%d]\n", mysql_error(conn), mysql_errno(conn));
        return -2;
    }
 
    /* output results*/
    result = mysql_use_result(conn);
    while ((row = mysql_fetch_row(result)) != NULL)
    {
        printf("%s\t%s\t%s\n", row[0], row[1], row[2]);
    }
    mysql_free_result(result);
 
    /* close connection */
    mysql_close(conn);
    return 0;
}

如果我的回答解决了您的问题,请采纳我的回答

你说,mysql_fetch_row只能输出一行结果 ,那么可能是因为您只调用了一次该函数。为了输出结果集中的多行数据,您需要在循环中多次调用mysql_fetch_row函数,直到它返回NULL为止。

以下是一个基本的示例代码来连接MySQL并执行SQL查询,然后打印输出结果集中的所有行:


#include <stdio.h>
#include <mysql/mysql.h>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    char *server = "localhost";
    char *user = "root";
    char *password = "yourpassword";
    char *database = "yourdatabase";

    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        return 1;
    }

    if (mysql_query(conn, "SELECT * FROM yourtable")) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        return 1;
    }

    res = mysql_use_result(conn);
    while ((row = mysql_fetch_row(res)) != NULL) {
        for (int i = 0; i < mysql_num_fields(res); i++) {
            printf("%s ", row[i]);
        }
        printf("\n");
    }

    mysql_free_result(res);
    mysql_close(conn);

    return 0;
}

在上面的代码中,while循环中多次调用mysql_fetch_row函数,直到它返回NULL为止。每次循环都会输出结果集中的一行数据。

请注意,此示例代码假设查询结果集中只包含文本数据,因此将每个字段作为字符串输出。如果您的结果集中包含其他类型的数据,如日期、时间或二进制数据,则需要根据数据类型进行相应的转换。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^