Как выполнить запрос в 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
и обратите внимание, что другие вещи не требуют кавычек, поскольку они являются именами, а не значениями.