5

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

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
}

所以恕我直言,这不是从结果中获取整数值的正确方法(但它有效),但我找不到如何做到这一点的好例子。此外,我对 C++ 编程还很陌生,因此欢迎对代码示例提供任何反馈。

4

3 回答 3

5
page_id = atoi(row[0]);
page_name = row[1]; // not really sure
于 2012-08-13T10:33:38.300 回答
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];
}

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

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,...);
}
于 2012-08-13T10:55:14.547 回答
3

您可以使用字符串流

 std::istringstream strStream(res[PAGE_ID]);
 strStream >> page_id;

你需#include<sstream>要这样做。在这里,我假设您的 PAGE_ID 值已正确设置为列索引以获取正确的列。我从问题中假设您唯一担心的是从stringto的转换,int*并且您的列索引已经正确

于 2012-08-13T10:36:49.463 回答