powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Запись в базу перед die
7 сообщений из 7, страница 1 из 1
Запись в базу перед die
    #39758925
Pupkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой фрагмент скрипта:

...
запись в базу MySQL;
if(условие) die();
...

Иногда, если условие есть, то выполняется die, но записи в базе нет. Иногда (не всегда)!
Можно ли предположить, что запись в базу происходит асинхронно (на низком уровне)
и dio успевает остановить выполнение до выполнения записи в базу?

Как гарантированно записать в базу перед dio?

В C++ в классе Application есть метод Application->ProcessMessages();
Есть ли аналог в PHP?
...
Рейтинг: 0 / 0
Запись в базу перед die
    #39758929
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pupkin,

Обычно функция выполнения запроса к БД возвращает результат выполнения запроса. Результат запросов вида INSERT или UPDATE обычно булево значение TRUE или FALSE. Последний случай вполне возможен, например, при попытке сделать вставку записи с дубликатом по уникальному ключу, и об этом можно сразу же прочитать в сообщении об ошибке. Таким образом, в случае единичного запроса к СУБД не может быть речи об асинхронности на уровне PHP->MySQL.
Однако, если из скрипта вызывается хранимая процедура, которая на каком-то этапе выполнения делает запись, то асинхронный вариант вполне возможен.
...
Рейтинг: 0 / 0
Запись в базу перед die
    #39758950
Pupkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle...функция выполнения запроса возвращает TRUE или FALSE. Таким образом, в случае единичного запроса к СУБД не может быть речи об асинхронности на уровне PHP->MySQL.
Однако, если из скрипта вызывается хранимая процедура..., то асинхронный вариант вполне возможен.О "хранимке" речь не идет (не обсуждаю).

А возврат значения из DbCnn->query(...) теоретически не гарантирует синхронности.
PHP вполне может вернуть значение после асинхронной обработки через обратный вызов.
Иначе чем можно обосновать отсутствие записи в DB перед выполнением dio?

Но идея хорошая (подумал спасибо). У меня везде DbCnn->query(...). Мне не нужно возвращаемое значение.
Сейчас (перед dio) перепишу так: $r=DbCnn->query(...). Надеюсь "умненький PHP" сообразит, что мне
нужен результат и откомпилит выполнение скрипта в синхронную реализацию.

Пару дне понаблюдаю, потом отпишусь.
...
Рейтинг: 0 / 0
Запись в базу перед die
    #39758991
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PupkinА возврат значения из DbCnn->query(...) теоретически не гарантирует синхронности.Вы считаете, что тот единственный случай, когда ни результат работы запроса вообще никуда не записывается и ни с чем не сравнивается, ни сообщения об ошибке не читаются, ни код ответа не проверяется - в этом случае PHP не ждет ответа от СУБД. Правильно понимаю?
...
Рейтинг: 0 / 0
Запись в базу перед die
    #39759058
Pupkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleПравильно понимаю? Да. Меня Вы поняли правильно!
Но так ли это на самом деле - не уверен, но предполагаю, что именно так.
Предполагаю потому, что иного обоснования случающемуся (иногда, а не всегда, и в разных
местах, а не в одном и том же, но всегда перед duo) не могу придумать.
...
Рейтинг: 0 / 0
Запись в базу перед die
    #39759070
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pupkin,

Вполне возможно, что так. Без ковыряния в исходниках (или в документации?) это сложно подтвердить или опровергнуть.

Однако, сталкивался с похожей ситуацией при вызове ХП. Картину такую наблюдал. Сама ХП состояла из десятка запросов + логики. Возвращает несколько рекордсетов. Полное время работы ХП, измеренное средствами SQL между BEGIN и END составляло порядка двух секунд. Но время, за которое отрабатывал метод query() из PDO (расширение, вроде, собрано с мускулячим драйвером ND) оказалось очень маленьким. Сейчас не вспомню точно, вроде десятков или сотни миллисекунд. Затем следовала серия вызовов fetchAll(), слегка разбавленная какой-то обработкой возвращенных данных, и к концу серии время в скрипте и в ХП как-то более-менее сошлись. Из этого я сделал вывод о некоторой асинхронности.

Возможно, PHP действительно ожидает ответа или результата от драйвера MySQL только при явном его использовании в скрипте.

В Вашем случае, вероятно, будет правильным проверить ошибку после выполнения запроса и, если таковая имеется, записать ее в лог-файл (или вывести в браузер) перед завершением скрипта. По крайней мере, будет понятно, что за ошибка произошла.
...
Рейтинг: 0 / 0
Запись в базу перед die
    #39759101
Pupkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleВполне возможно, что... Без ковыряния в исходниках... Перед ковырянием надо подумать какова цена победы?
Поэтому (пока только) ожидаю тупую подсказку - делать так, а не делать сяк.

Однако, сталкивался с похожей ситуацией ... Вашу ситуацию обдумал и resume положил в копилку личного опыта, спасибо.

Кстати об сделать возврат $r=DbCnn->query(...)Переписал у себя и спровоцировал if(условие) die();
Пока катит правильно. Это для Вашего опыта. Делайте выводы.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Запись в базу перед die
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]