gpt4 book ai didi

从 C 传递时带有变量的 MYSQL INTERVAL X MINUTE

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:35 25 4
gpt4 key购买 nike

当我运行我的代码以使用此代码更新 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 行的 '%d) MINUTE) WHERE attribute='next_run'' 附近使用的正确语法

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_query() 的查询。

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);
}

您还应该考虑使用 prepared statements而不是代入 SQL 字符串。如果您要替换字符串而不是数字,这将防止 SQL 注入(inject),并且您不必担心分配足够大的缓冲区。

关于从 C 传递时带有变量的 MYSQL INTERVAL X MINUTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com