我想知道是否可以在每个事务的基础上而不是每个连接的基础上设置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的方法中没有创建新的PDO连接可能会很有用,但是数据库类在第一次创建时就存储在对象池中。
发布于 2014-08-08 22:58:01
您可以执行以下操作:
$pdo = $this->pdo;
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);https://stackoverflow.com/questions/25203639
复制相似问题