C语言变量类型float和整数传递在mysql中

时间:2016-08-25 18:32:57

标签: mysql c

我是C和mysql编程的初学者。有些日子我正在尝试编写浮点数和整数值,我从传感器到mySQL中的数据库。到目前为止我只是得到一个错误“太多了函数'mysql_query'“和”expected'conc char *'“的参数。下面是我的简单代码。

int main()
{
    int var1 = 1;
    float var2 = 5.1;
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, host, user, pass, dbname,port, unix_socket, flag))
    {
        fprintf(stderr, "\nError: %s [%d]\n",mysql_error(conn),mysql_errno(conn));
        exit(1);
    }
    printf("Connection successful!\n"); 
    mysql_query(conn,"INSERT INTO variables (var1) VALUE  ('%d');",var1);   
    mysql_query(conn, mysql_query );
}

3 个答案:

答案 0 :(得分:2)

这是一个不错的主意,但mysql_query不适用于变量参数。

您需要将查询存储在缓冲区中:

char buff[1024];

snprintf(buff, sizeof buff, "INSERT INTO variables (var1) VALUES  ('%d');",var1);

然后你可以用这个缓冲区调用mysql_query

mysql_query(conn, buff);

修改 正如@PaulOgilvie所指出的那样:在查询中注意VALUES而不是VALUE

答案 1 :(得分:2)

你应该使用一个准备好的语句,它也会处理类型和所有这些(假设conn是一个有效的连接对象

MYSQL_STMT *stmt;
MYSQL_BIND params[1];
const char *query;

// This is necessary or the program will crash
memset(params, 0, sizeof(params));

query = "INSERT INTO variables (var1) VALUES (?)";
stmt = mysql_stmt_init(conn);

params[0].buffer = &var1;
params[0].buffer_type = MYSQL_TYPE_LONG;
if (stmt == NULL)
    exit(1); // Ideally handle the error and solve the problem
             // but for simplicity ...
if (mysql_stmt_prepare(stmt, query, strlen(query)) != 0)
    exit(1);
if (mysql_stmt_bind_param(stmt, params) != 0)
    exit(1);
if (mysql_stmt_execute(stmt) != 0) {
     // Ideally print mysql's error
    fprintf(stderr, "an error occurred\n");
}
mysql_stmt_close(stmt);

这是一种很好的安全方法,并且您可以根据需要多次重复使用预准备语句,并且他们承诺它会更快,更高效,因为查询准备所以执行计划是已知的,您不需要使用snprintf()顺便检查错误,并且您应该检查查询是否适合目标数组,阅读文档这一点。

此外,您不必担心转义字符串或其他任何内容。它将全部透明地为您处理。只要您使用正确的类型,当然,请指定字符串的长度。

请注意,您也可以在 SELECT 查询中绑定参数和结果。

答案 2 :(得分:0)

您确定此处不需要“VALUES”而不是“VALUE”:

mysql_query(conn,"INSERT INTO variables (var1) VALUE  ('%d');",var1);