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