如何在C中获取要在MySQL查询中使用的变量

时间:2016-01-17 02:55:14

标签: mysql c

我有一个连接到Raspberry Pi的温度传感器,我能够读取和打印温度。我接下来要做的是从传感器获取值并让它们登录到MySQL数据库。

一切正常,除了,我无法弄清楚如何格式化MySQL插入查询以使用f变量和read_dht_data()函数生成的h变量并将其传递给MIA_temp_insert(float f,float h )。

spark.executor.extraClassPath=<classapth>
spark.executor.extraClassPath=<classapth>

1 个答案:

答案 0 :(得分:1)

您不能直接在printf()中使用mysql_query() - 样式格式说明符,如上所述。相反,您可以使用sprintf()snprintf()将格式字符串(使用格式化的数字而不是格式说明符)写入缓冲区...然后将其作为查询字符串传递。

所以在MIA_temp_insert()中,而不是以下内容:

if(mysql_query(conn, "INSERT INTO `temperature` (`id`, `Date`,`Time`, `Temperature`, `Humidity`) VALUES (NULL, CURRENT_DATE(), CURRENT_TIME(), '%f' , '%f')") !=0)
{
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit (-1);
    /* ...etc... */

...你可以试试这个:

/* Your original query string, with the %f specifiers */
const char *formatstring = "INSERT INTO `temperature` (`id`, `Date`,`Time`, `Temperature`, `Humidity`) VALUES (NULL, CURRENT_DATE(), CURRENT_TIME(), '%f' , '%f')";

/* snprintf() the query into a buffer, to fill in the numbers */
char buf[256]; // should be large enough for the query with the numbers filled in
if (snprintf(buf, sizeof(buf), formatstring, f, h) >= sizeof(buf))
{
    exit(-1); // if snprintf() returned sizeof(buf) or more, buf was too short
}

/* call mysql_query() with the formatted query from the buffer */
if (mysql_query(conn, buf) != 0)
{
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit (-1);
    /* ...etc... */