Форум → Программирование → Пыхнуть хотите? → Готовые решения → 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, в объекте ДБ есть счетчик открытых транзакций
это ты к чему? по поводу предложения Олега я уже понял ))
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!