从C传递时,MYSQL间隔X分钟,带变量
当我运行代码用此代码更新MYSQL记录时,它会起作用:从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行的属性
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);
}