За последние 24 часа нас посетили 23514 программистов и 1559 роботов. Сейчас ищут 886 программистов ...

PDO фиксация транзакции (глюк или я чего не понимаю?)

Тема в разделе "PHP и базы данных", создана пользователем Dmitriy A. Arteshuk, 6 фев 2015.

  1. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1.  
    2. $db->beginTransaction();
    3. // тут большое количество операций в БД, select insert update delete
    4. // "коммита" нету!!!
    я правильно понимаю, что пока нет коммита, никаких изменений в БД не должно быть, после того как отработает скрипт? или нет? т.е.
    Код (Text):
    1.  
    2. $db->beginTransaction();
    3. // тут большое количество операций в БД, select insert update delete
    4. $db->commit(); // вот только сейчас будут изменения в БД, верно?
    Или все же, после открытия транзакции изменения в БД происходят, и если нет коммита, надо $db->rollBack(); вызвать что бы убрать изменения???
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    myisam не поддерживает транзацкии и лепит сразу изменения =) ты проверь, что у тебя innodb или ченить такое же умное
     
  3. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Завершение соединения с сервером без комита подразумевает роллбек.
    Но лучше всегда это делать руками явно. На практике могут быть проблемы при наличии пула соединений между пхп и базой.

    Добавлено спустя 3 минуты 15 секунд:
    Хотя может он на фантомное чтение наткнулся. Нет, что бы проблему описать.
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ну естесьна innodb там )

    видимо да, тут проблемка, exit; нету в скрипте )

    вот из дока
    а если скрипт еще не завершился, лепит все что угодно ((( даже если фиксации не было (((

    как то сука не логично (
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Как это не логично? А когда она должна откатываться по-твоему? ;)
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    если честно, я всегда рассуждал так:

    открыли транзакцию, и пока мы ее не "закоммитили" - никаких изменений

    я ошибался )
     
  7. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Что значит "никаких изменений"?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    значит, что при запросах этих данных не видно или возвращаются старые
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    может кому-то это уже очевидно, но я скажу: чтобы ТРЕБОВАЛСЯ ЯВНЫЙ commit, надо указывать \PDO::ATTR_AUTOCOMMIT = false. иначе он происходит неявно после каждого запроса.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не, если транзакция стартовала, то не должон.
     
  11. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    В той же сессии, что запущена транзакция? Т.е. делаешь инсерт, потом сразу же селект - и данных нет?
    Не, ну это надо одаренным быть, что бы так думать ;)
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Дмитрий, ты видимо слегка запутался в наблюдениях. Мускуль не врет и дока по PDO тоже. Не может часть зафиксироваться, а часть нет. Проверяй себя: движок точно InnoDb, транзакция точно стартована явно, проверяешь точно в другом соединении и т.д. и т.п.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да нет, снаружи другим скриптам, подключениям, юзерам, всем. Всем, кроме тебя.
     
  14. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Да, немного путанул )))

    Просто раньше, я "дебажил" так: перед коммитом exit; и тогда транзакция автоматом откатывалась

    тут немножко другая ситуация, скрипт продолжает работу, но даже без коммита изменения заносятся, надо откатывать транзакцию rollBack(), тогда все ровно

    Всем спасибо! )

    Добавлено спустя 27 секунд:
    именно так я и считал )
     
  15. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Считал как я сказал или igordata?
    Пока нет комита - другие подключения данных не видят, за исключением новых инсертов, чего тоже можно избежать.
     
  16. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    я под твоей цитатой это написал или под Игоря?
     
  17. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Под обеими. Так что у тебя не работает тогда?

     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты под обеими написал! я тоже спросить хотел! =)))))))
     
  19. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    да ну вас в жопу, займитесь делом, флудерасты! )))