Доброго времени суток!
Столкнулся почти с той же проблемой что описана
тут.
На HTTP сервер приходит два запроса, почти одновременно (даже секунды совпадают), один post запрос, который обрабатывает данные и заполняет таблицу, второй get запрос, который по результатам выборки из таблицы, выдает информацию.
Второй запрос (get) выбирает данные из таблицы которую изменил первый (post) и не видит изменений. только если я сделаю обновление страницы, тогда все ОК, и видны измененные данные.
Попробовал установить параметры транзакции как в той теме, т.е. для записи
$tr=ibase_trans(IBASE_CONCURRENCY | IBASE_NOWAIT, self::$connection);
и для читающей
IBASE_READ || IBASE_COMMITTED || IBASE_REC_VERSION || IBASE_NOWAIT
Все равно нет изменений, пока не сделаешь обновление страницы.
поставил IBExpert, последить за транзакциями, думал зависают - все ОК.
сделал цикл ожидания при обработке get запроса
....
$b->Load($Id); //загрузка данных из БД
$i=10;
While (($i>0) &&($b->STATUS=='A'))
{
$i=$i-1;
sleep(1);
$b->Load($id);
}
....
не помогает, все равно значение не изменяется, ставил $i=60, чтобы успеть сделать выборку в другой программе и посмотреть состояние поля записи. Поле изменено, все ОК, но при обработке get запроса, оно остается в старом состоянии.
только после обновления страницы все ОК и поле меняет значение. Добавлял в цикл ожидания,перед выборкой, реконект к базе, т.е. закрывал соединение и открывал снова
ibase_close(firebird::$connection);
firebird::Connect();
$b->Load($id);
Результат - 0, т.е. поле не измено, хотя как я писал выше, в другой программе делаю выборку и вижу прекрасно, что поле измено.
Попробовал сделать редирект при обработке get запроса (после обновления же изменения видны) - результат 0, т.е. тоже нет изменений.
Помогите, целый день убил на эту проблему, уже не знаю куда копать. Транзакции и так и так пробовал :(
Может что не так с версией PHP или ОС?
Использую OpenSuse 42.3 и PHP 5.5.14, firebird 2.5