Я хотел бы знать, можно ли установить 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 в каждом методе, который использует один, но класс базы данных хранятся в объекте бассейне при его создании.
Вы можете установить атрибут в любое время вы хотите, что вопрос – meda
Нет, я хочу знать, могу ли я установить атрибут только временно, пока я вручную выполнять операции , –
Что-то вроде этого '$ pdo = $ this-> pdo; $ pdo-> setAttribute (\ PDO :: ATTR_ERRMODE, \ PDO :: ERRMODE_EXCEPTION); 'таким образом он остается в вашей области видимости функции – meda