从C传递时,MYSQL间隔X分钟,带变量

从C传递时,MYSQL间隔X分钟,带变量,mysql,c,Mysql,C,当我运行代码用此代码更新MYSQL记录时,它会起作用: const char *update_query = "UPDATE `Time_Action_Settings` SET time= DATE_ADD(NOW(), INTERVAL 10 MINUTE) WHERE attribute='next_run'"; 当我尝试使用snprintf在C中传递一个变量时,代码运行时会收到一条错误消息:您的SQL语法中有一个错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行的属性

当我运行代码用此代码更新MYSQL记录时,它会起作用:

const char *update_query = "UPDATE `Time_Action_Settings` SET time= DATE_ADD(NOW(), INTERVAL 10 MINUTE) WHERE attribute='next_run'";
当我尝试使用snprintf在C中传递一个变量时,代码运行时会收到一条错误消息:您的SQL语法中有一个错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行的属性为class='next_run''的近“%d)分钟时要使用的正确语法

const char *update_query = "UPDATE `Time_Action_Settings` SET time= DATE_ADD(NOW(), INTERVAL %d MINUTE) WHERE attribute='next_run'";

if (mysql_query(conn, update_query) != 0)
{
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit(1);

} else {

    if (snprintf(buffer, sizeof(buffer), update_query, variable) >= sizeof(buffer))
    {
        printf("Issue with Buffer \n");
        exit (-1);
    }
}

首先需要调用
snprintf()
,然后使用缓冲区作为传递给
mysql\u query()
的查询

您还应该研究如何在SQL字符串中使用而不是替换。如果要替换字符串而不是数字,这将防止SQL注入,并且不必担心分配足够大的缓冲区

const char *update_query = "UPDATE `Time_Action_Settings` SET time= DATE_ADD(NOW(), INTERVAL %d MINUTE) WHERE attribute='next_run'";
if (snprintf(buffer, sizeof(buffer), update_query, variable) >= sizeof(buffer)) {
    printf("Issue with Buffer \n");
    exit (-1);
} else if (mysql_query(conn, buffer) != 0){
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit(1);
}