ФорумПрограммированиеПыхнуть хотите?Готовые решения → goDB — библиотека работы с MySQL

goDB — библиотека работы с MySQL

  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 19 сентября 2010 г. 20:32, спустя 5 минут 23 секунды

    по dbsimple всё правильно, раньше активно её использовал
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 19 сентября 2010 г. 20:48, спустя 15 минут 51 секунду

    TODO n1, ждем когда будет готово
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 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
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 20 сентября 2010 г. 11:15, спустя 10 часов 25 минут 23 секунды

    Нужны вложенные транзакции? Чтобы настоящий комит был только когда он вызван для всех вложенных?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 20 сентября 2010 г. 13:55, спустя 2 часа 40 минут 3 секунды

    Я уже писал, что мы давно сделали класс, расширяющий возможности godb для работы с "запросами изменяющими данные в базе". Даже вроде аттачил, но мне не жалко еще раз. (Скачав уберите расширение .gif)
    Может кому пригодится, там есть транзакции.
    С последней версией не тестил, но по идее должно работать.

  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 14:21, спустя 26 минут 15 секунд

    vasa_c, что значит вложенные?
    AlexB, думаю довольно замудрено, чем проще тем лучше… честно говоря не особо вдуплил в чём смысл, разве что "побезопаснее" моего предложения..
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 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(), но фактического коммита при этом не произойдёт.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 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
    }
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 15:06, спустя 23 часа 56 минут 26 секунд

    AlexB, ИМХО не стандартный подход ;)
    vasa_c а от куда ff(); узнает надо ей коммитить или нет? ;)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 15:09, спустя 2 минуты 31 секунду

    kostyl, $db узнает а не ff()
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 15:12, спустя 3 минуты 40 секунд

    vasa_c, Абырвалг я так понял это надо для всяких возможностей, но прикол в том, что управление транзакциями - это свойство приложения, проявляющееся в ACID и ты его никак не скроешь….

    или я чего то не пойму??
    Абырвалг
    < $db узнает а не ff()
    как?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 20 сентября 2010 г. 15:15, спустя 2 минуты 45 секунд


    AlexB, ИМХО не стандартный подход ;)
    Чего же в нем не стандартного? Роллбэк это в любом случае форс-мажор, поэтому ИМХО совершенно логично сделать его эксепшеном.
    Не забываем, что в роллбэке могут быть и другие действия, кроме непосредственно работы с базой, например, удаление лишних файлов. И очень здорово, когда весь "аварийный" код сосредоточен в отдельном месте.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 15:16, спустя 37 секунд

    vasa_c, а, я понял, ну можно и так сделать, если только ты всегда коммитишь…
    Спустя 80 сек.
    $GoDb->Transaction()

    я имею в виду интерфейс, одна и та же функция обладает двумя поведениями..
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 15:16, спустя 44 секунды

    kostyl, в объекте ДБ есть счетчик открытых транзакций
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 20 сентября 2010 г. 15:21, спустя 4 минуты 19 секунд

    kostyl, в объекте ДБ есть счетчик открытых транзакций

    это ты к чему? по поводу предложения Олега я уже понял ))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!