Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Добрый день. Пишу в с++ под qnx (gcc 4.2.x, mysql 5.1).
Суть задачи такова, что часто надо делать обновления данных (update) для нескольких записей в одной таблице сразу, после чего
такие же операции для нескольких других таблиц.
в параметре подключения в mysql_real_connect в качестве флага выставляю CLIENT_MULTI_STATEMENTS.
Если в одном и том же подключении делать mysql_real_query с апдейтами друг за другом для разных таблиц,
то для первой изменения вносятся, для последуюих пишется "Commands out of sync; you can't run this command now".
Ввел мутексы для блокировки доступа к поключению mysql, ничего не меняется. даже в одном потоке если делать
запросы друг за другом, то выскакиевает такое сообщеие. Если же делать для разных подключений (массив подключений), то все
вносится правильно. Сдается мне в одном подключении не успевают вноситься одни изменения, когда на сервер приходят новые.
Как отследить статус транзакции средсвами api?
Неактивен
Commands out of sync возникает тогда, когда сервер ожидает, что клиент сделает
какое-то действие (на внутреннем уровне), а клиент делает другое. Например,
клиент просит сервер сделать выборку, а потом начинает вытягивать данные. Сервер
ожидает, что клиент вытянет все данные (т.е. дойдет до маркера «конец данных»).
Если клиент при этом запросит через то же соединение новую выборку — он получит
ошибку синхронизации.
Я полагаю, что Вы изменяете данные первым запросом, не читаете ответ сервера, и
пытаетесь изменить данные следующим.
Неактивен
Вот кусок кода, который в первый раз отлично выполняется, в последующие выдает ошибку, out of sync...
Неактивен
в буфере находится длинная строка вида
begin;
update ... where id=...;
update ... where id=...;
update ... where id=...;
...
update ... where id=...;
commit;
Неактивен
Цитирую из официальной документации:
When using mysql_use_result(), you must execute mysql_fetch_row() until a NULL value is returned, otherwise, the unfetched rows are returned as part of the result set for your next query. The C API gives the error Commands out of sync; you can't run this command now if you forget to do this!
Вот так и делаю, никакой разницы.
Таблицы myISAM.
Неактивен
Попробуйте сделать совсем-совсем так, как написано в документации
if you enable CLIENT_MULTI_STATEMENTS or CLIENT_MULTI_RESULTS, you should process the result for every call to mysql_query() or mysql_real_query() by using a loop that calls mysql_next_result() to determine whether there are more results. For an example, see Section 21.10.12, “C API Support for Multiple Statement Execution”.
Неактивен
Страниц: 1