我想知道是否可以基于每个事务而不是基于每个连接来设置PDO :: ATTR_ERRMODE。
我在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 :(得分:0)
您可以执行以下操作:
$pdo = $this->pdo;
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);