MySQL C API:如何使用mysql_fetch_row()中的行?

ddi*_*hev 5 c c++ mysql

这是我的应用程序中的一些示例代码:

int page_id;
string page_name;

enum COLUMNS {
    PAGE_ID,
    PAGE_NAME
};

if (mysql_query(conn, "SELECT page_id, page_name FROM pages")) {
    exit_mysql_error(conn);
}

MYSQL_RES *res = mysql_use_result(conn);

while (MYSQL_ROW row = mysql_fetch_row(res)) {
    page_id = *(int *)res[PAGE_ID];
    page_name = res[PAGE_NAME];
    // do some stuff where I need the page_id and page_name int/string
}
Run Code Online (Sandbox Code Playgroud)

所以imho这不是从结果中获取整数值的正确方法(但它有效)但我找不到如何做到这一点的好例子.我也很擅长用C++编程,因此欢迎任何有关代码示例的反馈.

Cyb*_*m0n 5

page_id = atoi(row[0]);
page_name = row[1]; // not really sure
Run Code Online (Sandbox Code Playgroud)


TOC*_*TOC 5

您可以在这里找到有关如何在C/C++中使用Mysql API的完整示例:

使用c从单板计算机写入mysql数据库

获取你的字段:

while ((row = mysql_fetch_row (query_result))) 
{
    /* Each field in represented by the string row[i] */
    /* If the field you want to extract is an int, so you need to convert it */
    page_id = atoi(row[i]);
    page_name = row[2];

    last_filed = row[number_of_fields_in_your_table - 1];
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用查询结果构造一个缓冲区,并使用分隔符对其进行解析

while ((row = mysql_fetch_row (query_result))) 
{
        memset(buffer, '\0', sizeof(buffer));

        for (i = 0; i < num_fields - 1; i++)
        {
            strncat(buffer, row[i], strlen(row[i]) + 1);
            strncat(buffer, ";", 2);            
        }
        /* After this your buffer will contain 
         * buffer = "page_id;page_name;...;" 
         * and you can retreive all fields with snprintf for example
         */
         snprintf(buffer, sizeof(buffer), "%d;%s;...", page_id, page_name,...);
}
Run Code Online (Sandbox Code Playgroud)