将变量值插入mysql表

时间:2013-05-31 07:12:11

标签: mysql c

以下函数从外部机器读取缓冲区,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);
}

3 个答案:

答案 0 :(得分: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标准的扩展,使用它会破坏代码的可移植性。

答案 1 :(得分:0)

使用查询

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

而不是

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

答案 2 :(得分: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);