|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Доброго времени суток! Столкнулся почти с той же проблемой что описана тут . На HTTP сервер приходит два запроса, почти одновременно (даже секунды совпадают), один post запрос, который обрабатывает данные и заполняет таблицу, второй get запрос, который по результатам выборки из таблицы, выдает информацию. Второй запрос (get) выбирает данные из таблицы которую изменил первый (post) и не видит изменений. только если я сделаю обновление страницы, тогда все ОК, и видны измененные данные. Попробовал установить параметры транзакции как в той теме, т.е. для записи Код: php 1.
и для читающей Код: php 1.
Все равно нет изменений, пока не сделаешь обновление страницы. поставил IBExpert, последить за транзакциями, думал зависают - все ОК. сделал цикл ожидания при обработке get запроса Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
не помогает, все равно значение не изменяется, ставил $i=60, чтобы успеть сделать выборку в другой программе и посмотреть состояние поля записи. Поле изменено, все ОК, но при обработке get запроса, оно остается в старом состоянии. только после обновления страницы все ОК и поле меняет значение. Добавлял в цикл ожидания,перед выборкой, реконект к базе, т.е. закрывал соединение и открывал снова Код: php 1. 2. 3.
Результат - 0, т.е. поле не измено, хотя как я писал выше, в другой программе делаю выборку и вижу прекрасно, что поле измено. Попробовал сделать редирект при обработке get запроса (после обновления же изменения видны) - результат 0, т.е. тоже нет изменений. Помогите, целый день убил на эту проблему, уже не знаю куда копать. Транзакции и так и так пробовал :( Может что не так с версией PHP или ОС? Использую OpenSuse 42.3 и PHP 5.5.14, firebird 2.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2018, 21:36 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, по приведённому тексту не видно где ты стартуешь и завершаешь транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2018, 21:50 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
использую вот такую функцию для записи значения в таблицу Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
вот так вот вызываю Код: php 1.
если сделаю выборку, сразу после этого изменения, то прекрасно вижу что поле стало 'F', в параллельно обрабатываемом запросе значение не меняется, пока не сделаешь рефреш страницы ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 07:51 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
вот такая функция для выборки Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
с параметрами транзакции "игрался" и так и так, не видит изменения в паралельном запросе, хоть стреляй, пока не сделаешь рефреш. даже делал реконнекты к базе, в цикле ожидания - бесполезно. Только рефреш помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 07:55 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenestи для читающей Код: php 1.
7713885 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 08:22 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, не уверен что ibase_query использует твою транзакцию. По крайней мере места куда в эту функцию можно воткнуть хендл транзакции не видно. Попробуй заменить на ibase_prepare + ibase_execute ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 09:24 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, snakenestвот так вот вызываю Код: sql 1.
Офигительно, т.е. смастерил функцию поддерживающую параметризованные запросами, а параметрами не пользуемся. Отката транзакции в случае ошибки нет. Освобождение хендлов транзакции и запроса тоже не наблюдается. Надеемся на то что драйвер всё хорошо сделает за вас? >> с параметрами транзакции "игрался" и так и так, не видит изменения в паралельном запросе, хоть стреляй, пока не сделаешь я уже сказал ваша функция выборки использует транзакцию по умолчанию. А она вроде как IBASE_CONCURRENCY, поэтому ты можешь хоть 500 раз перезапустить свой запрос всё одно и то же будет. Старт и коммит транзакции RC идёт в холостую. В этой транзакции ничего не делается. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 09:39 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
29.08.2018 8:22, hvlad пишет: > 7713885 < http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&msg=7713885> us-us! (как говорит Коваленко) зы: понапридумывают птичьих языков псевдопрограммирования... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 11:33 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Симонов Денисsnakenest, не уверен что ibase_query использует твою транзакцию. По крайней мере места куда в эту функцию можно воткнуть хендл транзакции не видно. Попробуй заменить на ibase_prepare + ibase_execute Да, скопировал старый вариант функции. Вот Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Как видите, транзакция используется во всех вариантах выполнения запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 12:09 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Симонов Денисsnakenest, snakenestвот так вот вызываю Код: sql 1.
Офигительно, т.е. смастерил функцию поддерживающую параметризованные запросами, а параметрами не пользуемся. Отката транзакции в случае ошибки нет. Освобождение хендлов транзакции и запроса тоже не наблюдается. Надеемся на то что драйвер всё хорошо сделает за вас? >> с параметрами транзакции "игрался" и так и так, не видит изменения в паралельном запросе, хоть стреляй, пока не сделаешь я уже сказал ваша функция выборки использует транзакцию по умолчанию. А она вроде как IBASE_CONCURRENCY, поэтому ты можешь хоть 500 раз перезапустить свой запрос всё одно и то же будет. Старт и коммит транзакции RC идёт в холостую. В этой транзакции ничего не делается. Я уже и так, и так делал этот вызов, уже подумал, что может из-за параметров запроса, какая-то фигня, т.е. от безисходности уже самые невероятные предположения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 12:12 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenestКак видите, транзакция используется во всех вариантах выполнения запроса Но при этом она глобальная и никогда не завершается. Прэлеестно... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 12:16 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Вот то что я использую Код: php 1.
вот описание: IBASE_WRITE Начинает транзакцию в режиме чтения и записи. BASE_COMMITTED Начинает транзакцию с уровнем изоляции 'read committed' (читать фиксированое). Этот флаг должен быть объединен с IBASE_REC_VERSION или IBASE_REC_NO_VERSION . Этот уровень изоляции позволяет получить доступ к изменениям, совершеными после начала транзакции. Если указан флаг IBASE_REC_NO_VERSION , только последняя версия изменений может быть прочитана. Если указан флаг IBASE_REC_VERSION , то можно читать изменения, находящиеся в очереди в параллельных транзакциях. IBASE_NOWAIT Флаг, указывающий, что транзакция должна ждать при возникновении конфликта транзакций. Т.е. транзакция чтения/записи которая имеет доступ к транзакциям совершенным после старта оной, читает все изменения в параллельных транзакциях, и при возникновении конфликта, выдает ошибку. Что я делаю не так? (( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 12:22 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovsnakenestКак видите, транзакция используется во всех вариантах выполнения запроса Но при этом она глобальная и никогда не завершается. Прэлеестно... Код: php 1.
В рамках выполнения этого запроса, функцией описанной выше "firebird::execsql", строка Код: php 1.
разве не завершает транзакцию ? нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 12:42 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenestстрока ibase_commit($tr); разве не завершает транзакцию ? нет? Ткни пальцем в эту строку в твоём коде: http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1301706&msg=21657435 Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 12:49 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, у вас какое-то чрезмерное увлечение статическими членами класса. Это зло в квадрате. Вы в них запихиваете почти всё, а это считай уже глобальные переменные ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 13:04 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Симонов Денисsnakenest, у вас какое-то чрезмерное увлечение статическими членами класса. Это зло в квадрате. Вы в них запихиваете почти всё, а это считай уже глобальные переменные Это исключительно в этом модуле, в котором я создал класс инкапсулирующий работу с firebird, потому там и статика, чтобы не плодить соединений в рамках одной обработки запроса сайта. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 13:38 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, да, но транзакцию статическим членом класса ты сделал зря. К тому же не следишь за временем её жизни ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 13:41 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovsnakenestстрока ibase_commit($tr); разве не завершает транзакцию ? нет? Ткни пальцем в эту строку в твоём коде: http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1301706&msg=21657435 Посмотрите внимательно на то что написано: $res=firebird::execsql("update Accure t set t.Status='F' where t.id=".$this->ID); посмотрите внимательно на код этой функции: 21657087 Вы видите строку? Код: php 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 13:45 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, и где там использование созданной тр-ции ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 13:51 |
|
Запрос не видит изменения данных таблицы
|
|||
---|---|---|---|
#18+
snakenest, короче ты запутался в трёх соснах. Советую запустить тебе трассировку и посмотреть, когда у тебя начинаются и завершаются транзакции. Заодно увидишь с какими параметрами они реально стартуют. Код твоего класса для работы с firebird одни сплошные макароны. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 14:02 |
|
|
start [/forum/topic.php?fid=40&msg=39694656&tid=1561003]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 304ms |
total: | 464ms |
0 / 0 |