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 値が列インデックスに正しく設定されていると想定しています。string質問から、あなたの唯一の心配はからのキャストでint*あり、列のインデックスはすでに正しいと思いました

于 2012-08-13T10:36:49.463 に答える