Mysql C API:命令不同步;您现在不能运行此命令

时间:2019-06-02 08:42:55

标签: mysql c

我使用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);
}

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

1 个答案:

答案 0 :(得分:0)

如果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);