Форум → Программирование → Пыхнуть хотите? → Готовые решения → goDB — библиотека работы с MySQL
goDB — библиотека работы с MySQL
Страницы: ← Предыдущая страница • Следующая страница →
-
19 сентября 2010 г. 20:32, спустя 5 минут 23 секунды
по dbsimple всё правильно, раньше активно её использовал -
-
20 сентября 2010 г. 0:49, спустя 4 часа 1 минуту 33 секунды
Чё то я не понял что там в туду по транзакциям. Если их нету предлагаю вообщем стандартное (у меня так):public function startTransaction() { $this->_connect(); $this->_connector->autocommit(false); $this->_activeTransaction = true; } public function commit() { $this->_connect(); if ($this->_activeTransaction) { $this->_connector->commit(); $this->_connector->autocommit(true); $this->_activeTransaction = false; } } public function rollback() { $this->_connect(); if ($this->_activeTransaction) { $this->_connector->rollback(); $this->_connector->autocommit(true); $this->_activeTransaction = false; } }
connector это объект mysqli -
20 сентября 2010 г. 11:15, спустя 10 часов 25 минут 23 секунды
Нужны вложенные транзакции? Чтобы настоящий комит был только когда он вызван для всех вложенных? -
20 сентября 2010 г. 13:55, спустя 2 часа 40 минут 3 секунды
Я уже писал, что мы давно сделали класс, расширяющий возможности godb для работы с "запросами изменяющими данные в базе". Даже вроде аттачил, но мне не жалко еще раз. (Скачав уберите расширение .gif)
Может кому пригодится, там есть транзакции.
С последней версией не тестил, но по идее должно работать. -
20 сентября 2010 г. 14:21, спустя 26 минут 15 секунд
vasa_c, что значит вложенные?
AlexB, думаю довольно замудрено, чем проще тем лучше… честно говоря не особо вдуплил в чём смысл, разве что "побезопаснее" моего предложения.. -
20 сентября 2010 г. 14:51, спустя 30 минут 14 секунд
Это значит в какой-то функции используется транзакция:function ff() { $db->begin(); $db->query(…); $db->query(…); $db->commit(); }
А потом в другом месте в рамках другой транзакции вызывается эта функция.$db->begin(); $db->query(…); ff(); $db->query(…); $db->commit();
Первый коммит будет вызван в ff(), но фактического коммита при этом не произойдёт. -
20 сентября 2010 г. 15:10, спустя 18 минут 16 секунд
kostyl, да че там мудреного?try { $GoDb->Transaction(); // Стартанули транзакцию $GoDb->Delete( … или/и $GoDb->SmartInsert( … или/и $GoDb->Insert( … или/и $GoDb->Update( … $GoDb->Transaction(); // Закомитили } catch (DBExceptionRollbackTrigger $et) { $GoDb->Transaction(); // Произошла херня, откатились // Здесь, при желании, можно прокинуть Exception дальше, если есть их обработка для GoDb }
-
20 сентября 2010 г. 15:06, спустя 23 часа 56 минут 26 секунд
AlexB, ИМХО не стандартный подход ;)
vasa_c а от куда ff(); узнает надо ей коммитить или нет? ;) -
-
20 сентября 2010 г. 15:12, спустя 3 минуты 40 секунд
vasa_c, Абырвалг я так понял это надо для всяких возможностей, но прикол в том, что управление транзакциями - это свойство приложения, проявляющееся в ACID и ты его никак не скроешь….
или я чего то не пойму??
Абырвалг
< $db узнает а не ff()
как? -
20 сентября 2010 г. 15:15, спустя 2 минуты 45 секунд
Чего же в нем не стандартного? Роллбэк это в любом случае форс-мажор, поэтому ИМХО совершенно логично сделать его эксепшеном.
AlexB, ИМХО не стандартный подход ;)
Не забываем, что в роллбэке могут быть и другие действия, кроме непосредственно работы с базой, например, удаление лишних файлов. И очень здорово, когда весь "аварийный" код сосредоточен в отдельном месте. -
20 сентября 2010 г. 15:16, спустя 37 секунд
vasa_c, а, я понял, ну можно и так сделать, если только ты всегда коммитишь…Спустя 80 сек.$GoDb->Transaction()
я имею в виду интерфейс, одна и та же функция обладает двумя поведениями.. -
-
20 сентября 2010 г. 15:21, спустя 4 минуты 19 секунд
kostyl, в объекте ДБ есть счетчик открытых транзакций
это ты к чему? по поводу предложения Олега я уже понял ))
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!