Mysql C API: команды не синхронизированы;Вы не можете запустить эту команду сейчас - PullRequest
0 голосов
/ 02 июня 2019

Я использую C api mysql, однако при подключении к базе данных возникает ошибка, и я выбираю выбранный пункт.Msgstr "Команды не синхронизированы; вы не можете запустить эту команду сейчас"

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 голосов
/ 02 июня 2019

Существует вероятность того, что вы не освободите 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...