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

使用查询

INSERT INTO results("resa","resb","resc","resd","rese") VALUES(resa,resb,resc,resd,rese)

代替

INSERT INTO results VALUES(resa,resb,resc,resd,rese)
于 2013-05-31T07:17:12.073 回答
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 回答