Автокоммит с PDO

Откат моей транзакции не работает. Как установить для автофиксации значение false (или 0) в php-скрипте с использованием PDO (у меня InnoDB 5.7.18)?

Вот мой код:

     global $bdd;  //defined with PDO

       try {                             
            $bdd->beginTransaction();
            /* my requests */
            $bdd->commit();
        } catch (Exception $e) {
            $bdd->rollBack();
            return $e->getMessage();
        }

        return true;
    }

person Matthieu Barthe    schedule 21.07.2017    source источник
comment
Метод PDO::beginTransaction() отключает режим автоматической фиксации.   -  person David Lopez    schedule 14.06.2018


Ответы (3)


Я сам решил свою проблему: несколько моих таблиц были в MyISAM (тогда как большинство в InnoDB -> я работаю со старой системой баз данных...); поэтому откат не работал для этих таблиц. Как только я изменил их на InnoDB, это сработало. Спасибо всем за помощь!

person Matthieu Barthe    schedule 21.07.2017

Попробуйте установить следующий атрибут:

$bdd->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
person Dileep Kumar    schedule 21.07.2017
comment
Вы установили этот атрибут? попробуйте установить его при открытии соединения с базой данных - person Dileep Kumar; 21.07.2017
comment
Это тоже не работает... но спасибо за вашу помощь! - person Matthieu Barthe; 21.07.2017

person    schedule
comment
Спасибо за ответ; var_dump дал мне следующее: по-прежнему ON, когда я вхожу в mysql SHOW VARIABLES WHERE Variable_name='autocommit'; .... и откат все равно не работает... :( - person Matthieu Barthe; 21.07.2017
comment
Убедитесь, что оператор языка определения базы данных (DDL), такой как DROP TABLE или CREATE TABLE в MySQL, не может использоваться в транзакциях. - person Deepraj Parmar; 21.07.2017
comment
Вы пробовали - $dbh-›setAttribute(PDO::ATTR_AUTOCOMMIT, 0); $dbh-›beginTransaction(); - person Deepraj Parmar; 21.07.2017
comment
да, я пробовал это, и я использую только запросы UPDATE в своей транзакции... :( - person Matthieu Barthe; 21.07.2017