gpt4 book ai didi

在 C 中删除行的 MySQL 命令不起作用

转载 作者:行者123 更新时间:2023-11-30 19:28:09 34 4
gpt4 key购买 nike

我通常不使用 C 编程语言编写代码,但我在学校学到了它(所以请耐心等待,因为我仍然是新手)。
简而言之,我最近被分配用 C 语言编写代码,以便从 MySQL 数据库的表中删除行。

我使用了堆栈溢出和其他资源来帮助我编写此代码!

这是我的代码(不是全部):

void delete_rows(MYSQL *con)
{
char selection_query[256];
char deletion_query[256];

sprintf(selection_query, "SELECT id FROM <table> WHERE status = 'PROCESSING'\
AND started < DATE(NOW()) - INTERVAL %d DAY", expire_processing_days);
if (mysql_query(con, selection_query))
{
finish_with_error(con);
}

MYSQL_RES *result = mysql_store_result(con);

if (result == NULL)
{
finish_with_error(con);
}

int num_fields = mysql_num_fields(result);

MYSQL_ROW row;

while ((row = mysql_fetch_row(result)))
{
for(int i = 0; i < num_fields; i++)
{
printf("Deleting process with id: %s ", row[i] ? row[i] : "NULL");
sprintf(deletion_query, "DELETE FROM <table> WHERE id = %d", row[i]);
if (mysql_query(con, deletion_query))
{
finish_with_error(con);
}
mysql_commit(con);
}
printf("\n");
}

mysql_free_result(result);
}

int main()
{
MYSQL *con;
DB_CONN_PARAMS *params = calloc(1,sizeof(DB_CONN_PARAMS));

//just an alternative way of passing connection params, find a struct easier
strcpy(params->host, <host>);
strcpy(params->user, <user>);
strcpy(params->pass, <password>);
strcpy(params->db, <database>);

MYSQL * connect_db(DB_CONN_PARAMS *params);
con = connect_db(params);

//we don't need the struct anymore
free(params);
params = NULL;

//kill processes that are incomplete/hanging
delete_rows(con);

//close mysql connection
mysql_close(con);

return EXIT_SUCCESS;
}

所以,上面的代码编译并运行没有任何错误,它打印出我想要删除的行的 id。但是当我去数据库检查行时,它们仍然在那里!

我有什么遗漏的吗?

最佳答案

好吧,我终于明白了!
我将以下行中的 %d 更改为 %s:
sprintf(deletion_query, "从 id = %d 处删除", row[i]);
因为 row[i] 是一个字符串,所以我对此视而不见。

我能够通过打印整个 MySQL 命令来弄清楚它,并注意到传递的 id 是错误的!

感谢大家为我提供的帮助。

关于在 C 中删除行的 MySQL 命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579217/

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