Как выполнить запрос в c без mysql_free_result(res)

while ((row = mysql_fetch_row(res)) != NULL) {

    sprintf(statement, "DELETE FROM `outgoing` WHERE `outgoing`.`id`=%s", row[0]);

    if (mysql_query(conn, statement)) {
        fprintf(stderr, "%s\n", mysql_error(conn));    
    }
}

я получаю Commands out of sync; you can't run this command now ошибка

2 ответа

Вы, вероятно, используете mysql_use_result() функция для получения результатов из базы данных MySQL. В этом случае строки отправляются клиенту по одному, когда mysql_fetch_row() называется. Пока все строки не извлечены, дескриптор базы данных "заблокирован":

Когда используешь mysql_use_result(), вы должны выполнить mysql_fetch_row() пока не будет возвращено значение NULL, в противном случае невыполненные строки возвращаются как часть набора результатов для вашего следующего запроса. C API выдает ошибку Commands out of sync; you can't run this command now если вы забудете это сделать!

Пытаться mysql_store_result() в качестве замены. Эта функция извлекает все строки одновременно.

Правильное утверждение:

sprintf(statement, "DELETE FROM outgoing WHERE outgoing.id='%s'", row[0]);

Обратите внимание на правильную цитату вокруг %s и обратите внимание, что другие вещи не требуют кавычек, поскольку они являются именами, а не значениями.

Другие вопросы по тегам