首页 > 解决方案 > Mysql C API:命令不同步;你现在不能运行这个命令

问题描述

我使用的是C api mysql,但是连接数据库时遇到错误,我选择了选中的项。“命令不同步;您现在无法运行此命令”

boolean
check_token(char *token) {
    MYSQL_RES   *res;
    MYSQL_ROW   row;
    char        *pass;
    char        query[200];

    snprintf(query, 200, "SELECT * FROM tokens WHERE token = \"%s\"", token); //  SELECT * FROM tokens WHERE token = "84ds4d3d3sd453s"
    if (mysql_query(&db, query)) {
        fprintf(stderr, "%s\n", mysql_error(&db));
        return (FALSE);
    }
    printf("OK\n");
    if (!(res = mysql_store_result(&db))) {
        fprintf(stderr, "%s\n", mysql_error(&db));
        return (FALSE);
    }
    if (!(row = mysql_fetch_row(res)))
        return (FALSE);
    pass = row[1];
    printf("Le token est %s\n", pass);
    mysql_free_result(res);
    return (TRUE);
}

之前没有提出进一步的请求。只是连接成功的数据库。

标签: mysqlc

解决方案


MYSQL_RES如果调用失败,您可能不会释放mysql_fetch_row,从而使下一个后续调用失败。

free从函数返回之前的结果。

if (!(row = mysql_fetch_row(res)))
{
    mysql_free_result(res); //Free before returning
    return (FALSE);
}

pass = row[1];
printf("Le token est %s\n", pass);
mysql_free_result(res);
return (TRUE);

推荐阅读