0

次の関数は、外部マシンからバッファーを読み取ります。strtok を使用して、必要なトークンをいくつか取得し、printf で次のような結果を取得します。

Results1: 12, 23.345, 2.34, 23.45, 5.67

これらの結果を results という Mysql テーブルに保存したいのですが、クエリの VALUES() 内に何を記述すればよいかわかりません。resa、resb、resc、resd、rese を挿入するにはどうすればよいですか?

for (;;)
{
 char buff[1000];

 n=read(fd,buff,1000);
 sleep(1);

 char resa[25] = "", resb[25] = "", resc[25] = "", resd[25] = "", rese[25] = "";
 char* ptr;

 ptr = strtok(buff, "+PARAMETERS()\nsYSTEM ,=M:DK:RT:PTT()");
 int i = 0;
 while (ptr != NULL)
 {
    ptr = strtok(NULL, "+PARAMETERS()\nsYSTEM ,=M:DK:RT:PTT()");
    if (i == 2)
        strcat(resa, ptr); 
    if (i == 5)
        strcat(resb, ptr); 
    if (i == 6)
        strcat(resc, ptr); 
    if (i == 8)
        strcat(resd, ptr); 
    if (i == 10)
        strcat(rese, ptr); 
    i++;
   }

   printf("Results1: %s, %s, %s, %s, %s\n\n", resa,resb,resc,resd,rese);

 if(mysql_query(conn, "INSERT INTO results VALUES(...)"))
{
    fprintf(stderr, "%s\n", mysql_error(conn));
    return -1;
}

res = mysql_use_result(conn);
}
4

3 に答える 3

1

に出力するために使用するようsprintf()に、文字配列に出力するために使用printf()したい場合がありますstdout

char querystring[256];
size_t sizeQuerystring = sizeof querystring;

if (sizeQuerystring < snprintf(querystring, sizeQuerystring,
  "INSERT INTO results (resa, resb, resc, resd, rese)" \
  "VALUES (%s, %s, %s, %s, %s)",
  resa, resb, resc, resd, rese))
{
  fprintf(stderr, "The query string to small.\n");
}
else
{
  ... /* issue query */
}

ただし、ターゲット配列をオーバーフローしないように注意する必要があります。snprintf()プログラムでこれを行うのに役立ちます。


GCC を使用している場合はasprintf()、必要な数のエントリを文字配列に割り当てる を使用できます。free()配列は後で編集する必要があります。

char * pquerystring = NULL;

if (-1 == asprintf(&pquerystring, 
  "INSERT INTO results (resa, resb, resc, resd, rese)" \
  "VALUES (%s, %s, %s, %s, %s)",
  resa, resb, resc, resd, rese))
{
  perror("asprintf() failed");
}
else
{
  ... /* issue query */
}

free(pquerystring);

それasprintf()を使用するC標準の拡張機能であるため、コードの移植性が損なわれます。

于 2013-05-31T07:21:50.550 に答える
0

このように使います。

 if(!mysql_query(conn, "INSERT INTO table_name (column_name)VALUES (value)")) 
    {
        fprintf(stderr, "%s\n", mysql_error(conn));
        return -1;
    }

    res = mysql_use_result(conn);
于 2013-05-31T07:19:05.427 に答える