2014-08-08 22 views
0

Я хотел бы знать, можно ли установить PDO :: ATTR_ERRMODE для каждой транзакции, а не для каждого соединения.PDO setAttribute за операцию за каждую транзакцию

открыть соединение с базой данных в class Database и в настоящее время установки атрибута есть: в настоящее время

namespace Core { 
    class Database { 
     private $pdo; 

     public function __construct() { 
      $this->pdo = new \PDO(/*Connection arguments*/); 
      $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 
     } 

     public function getConnection() { 
      return $this->pdo; 
     } 
    } 
} 

Все ошибки будут бросать исключения, однако, я бы только, как это поведение при работе с ручными операциями.

В идеале, я бы в состоянии сделать что-то вроде:

namespace Repositories { 
    class Something { 
     private $pdo; 

     public function __construct(\Core\Database $database) { 
      $this->pdo = $database->getConnection(); 
     } 

     public function doSomething() { 
      $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // Set the attribute here 
      $this->pdo->beginTransaction(); 

      try { 
       // Execute some queries and statements 
       $this->pdo->commit(); 
      } 
      catch (\PDOException $e) { 
       $this->pdo->rollback(); 
       // Do something with $e 
      } 
     } 
    } 
} 

И для режима ошибки должны быть возвращены значения по умолчанию в конце метода (я знаю, что мой пример не будет работать)

заранее спасибо

это может быть полезно для вас, чтобы знать, что я не создать новое соединение PDO в каждом методе, который использует один, но класс базы данных хранятся в объекте бассейне при его создании.

+0

Вы можете установить атрибут в любое время вы хотите, что вопрос – meda

+0

Нет, я хочу знать, могу ли я установить атрибут только временно, пока я вручную выполнять операции , –

+0

Что-то вроде этого '$ pdo = $ this-> pdo; $ pdo-> setAttribute (\ PDO :: ATTR_ERRMODE, \ PDO :: ERRMODE_EXCEPTION); 'таким образом он остается в вашей области видимости функции – meda

ответ

0

Вы можете сделать следующее:

$pdo = $this->pdo; 
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 
+0

Должен ли я клонировать '$ this-> pdo'? –

+1

да см. Здесь http://php.net/manual/en/language.oop5.references.php – meda

Смежные вопросы