我应该做
$dbh->beginTransaction();
try{
或者
try{
$dbh->beginTransaction();
没关系,它会运行代码而不管它的位置。但是你想把它放在rollback()
中,如果你把它放在外面catch
,它是不可读的。begin
我会在里面投票try
。
这可能并不重要。但是,最好beginTransaction
将try
. 当beginTransaction
失败时,它不应该执行rollback
.
将其添加到try
/catch
块内,这样您就可以捕获任何内容PDOException
:
try {
$dbh->beginTransaction(); // start transaction
$stmt = $dbh->query($query); // run your query
$dbh->commit(); // commit
} catch(PDOException $ex) { // if exception, catch it
$dbh->rollBack(); // rollback query
echo $ex->getMessage(); // echo exception message
}
在这种情况下,这无关紧要,因为 beginTransaction 将在失败时返回 false。如果它抛出异常,你会希望它在嵌套的 try 块内(否则你会在捕获异常后执行 rollBack(),因为没有事务启动而失败)。
如果您想捕获 beginTranscation 方法应该抛出的可能错误,请选择第二个。