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

标签 mysql c

我通常不使用 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/

相关文章:

mysql - 按给定 ID 排序顺序选择记录

php - Sql 将结果显示在 1 行而不是重复

mysql - SQL 请求报告

java - Hibernate 很难使用 MySQL 创建表

php - 将 MySQL 数据库完全导入到 Solr 4 会出现 404 错误

c - 自由二维数组

python - C.dll 如何向 Python 公开变量?

c - 进程 ID 的数学表达式作为网格大小、进程数量和线路 ID 的函数

c - Glade GTK 访问各个小部件

c - 在 CUDA 中实现减少的问题