PDO - beginTransaction () в расширенном классе - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время я выполняю рефакторинг своего кода и получаю следующую ошибку:

Uncaught PDOException: Нет активной транзакции в ...

 class Dbh {

    private $serverName;
    private $userName;
    private $password;
    private $dbName;

    public function connect(){

        $this->serverName = "localhost";
        $this->userName = "root";
        $this->password = "password";
        $this->dbName = "rms";
        $this->charset = "utf8";

        $dsn = "mysql:host=" . $this->serverName . ";dbname=" . $this->dbName . ";charset=" . $this->charset;
        $pdo = new PDO($dsn, $this->userName, $this->password); 
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        return $pdo;
    }

 }


 class General extends Dbh {

     public function putHistory($consultantID, $type, $typeID) {

         $this->connect()->beginTransaction();

         $stmt = $this->connect()->prepare("INSERT INTO History (consultantID, type, typeID) VALUES (:consultantID, :type, :typeID) ");
         $stmt -> execute(array(':consultantID' => $consultantID, ':type' => $type, ':typeID' => $typeID));

         $this->connect()->commit();
     }

 }

 $GeneralObject = new General;
 $GeneralObject -> putHistory("1", "2", "3");

Я предполагаюЯ неправильно называю beginTransaction() / commit() в этом случае?

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 26 сентября 2018

Я думаю, что ошибка связана с многократным вызовом $this->connect(), вы вызываете его 3 раза в putHistory().Следовательно, каждый раз, когда возвращается новый $pdo объект.Я бы порекомендовал вам вызывать $this->connect() только один раз и сохранять его значение в переменной, а затем вызывать эти функции: beginTransaction(), commit().

...