• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема С Update

  • Автор темы AQR
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

AQR

При повторном вызове одного и того же UPDATE появляется ошибка:
Database Server Error: Commands out of sync; you can't run this command now.

Нашел в описаниях в манах по мускулю:
When using mysql_use_result(), you must execute mysql_fetch_row() until a NULL value is returned, otherwise, the unfetched rows will be returned as part of the result set for your next query. The C API will give the error Commands out of sync; you can't run this command now if you forget to do this!

Перевод на мой взгляд примерно следующий:
Когда используется mysql_use_result() ты должен выполнить mysql_fetch_row() до тех пор пока не вернется NULL, иначе не полученные поля будут возвращены в след.запросе. И вы получите данныу ошибку.

Только вот , что-то не могу понять смысл., в моем случае же нет выборки, да и SQLQuery(DBExpress) используется только для односторонней связи.

Вызов UPDATE:
Код:
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('UPDATE BIC SET vrb="'+Vrb.Text+'",o="'+o.Text+'",client="'+client.Text+'",state="'+state
.Text+'",telefon="'+telefon.Text+'",kontakts="'+Boss.Text+'",adress="'+adr
ess.Text+'",mail="'+Email.Text+'",last_memo="'+History.Text+'" WHERE id='+var_id);
try
SQLQuery1.ExecSQL;
Except
on E: EDatabaseError do
begin
ShowMessage(E.Message+ 'Невозможно выполнить запрос');
exit;
end;
end;
 
B

BVS

<!--QuoteBegin-AQR+7:08:2007, 00:23 -->
<span class="vbquote">(AQR @ 7:08:2007, 00:23 )</span><!--QuoteEBegin-->да и SQLQuery(DBExpress) используется только для односторонней связи
[snapback]74580" rel="nofollow" target="_blank[/snapback]​
[/quote]
Ну и что, при односторонней связи так-же можно вернуть выборку.

Если получена ошибка Commands out of sync; you can't run this command now в клиентском коде, то клиентские функции вызываются в неправильном порядке!

Это может произойти, например, если используется mysql_use_result() и делается попытка выполнить новый запрос до того, как вызвана mysql_free_result(), или если клиент пытается выполнить два возвращающих данные запроса без обращения к mysql_use_result() либо mysql_store_result() в промежутке между ними.

Еще интересный момент в приведенном коде<!--QuoteBegin-AQR+7:08:2007, 00:23 -->
<span class="vbquote">(AQR @ 7:08:2007, 00:23 )</span><!--QuoteEBegin-->ShowMessage(E.Message+ 'Невозможно выполнить запрос');
[snapback]74580" rel="nofollow" target="_blank[/snapback]​
[/quote] а программы твоя выдает ошибку
<!--QuoteBegin-AQR+7:08:2007, 00:23 -->
<span class="vbquote">(AQR @ 7:08:2007, 00:23 )</span><!--QuoteEBegin-->Database Server Error: Commands out of sync; you can't run this command now.
[snapback]74580" rel="nofollow" target="_blank[/snapback]​
[/quote] Ты уверен, что ошибка в этом месте? (где в сообщении слова 'Невозможно выполнить запрос')
 
A

AQR

Ошибка возникает именно в приведенном выше запросе, трассировка рулит.
Запрос то UPDATE, вернуть он может максимум 1,0
 
A

AQR

Если получена ошибка Commands out of sync; you can't run this command now в клиентском коде, то клиентские функции вызываются в неправильном порядке!

Это может произойти, например, если используется mysql_use_result() и делается попытка выполнить новый запрос до того, как вызвана mysql_free_result(), или если клиент пытается выполнить два возвращающих данные запроса без обращения к mysql_use_result() либо mysql_store_result() в промежутке между ними.

Забыл добавить :D при первом выполнении запроса ошибка не возникает :(

Разобрался!
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!