我需要触发 2 个查询。目前我正在这样做:
// Begin Transaction
$this->db->beginTransaction();
// Fire Queries
if($query_one->execute()){
if($query_two->execute()){
// Commit only when both queries executed successfully
$this->db->commit();
}else{
$this->db->rollback();
}
}else{
$this->db->rollback();
}
这是正确的方法吗?我的代码中没有使用任何 try..catch ,这会使我的代码在任何情况下都不合适或容易受到攻击吗?
是的,你的做法是正确的。使用Try...catch
在某些情况下可能会导致更干净、更易读的代码,但总体方法是好的。
如果您的代码片段来自处理数据库查询的函数而没有其他功能,我可能会改变方法:
// Begin Transaction
$this->db->beginTransaction();
// Fire Queries
if(!$query_one->execute()){
$this->db->rollback();
// other clean-up goes here
return;
}
if(!$query_two->execute()){
$this->db->rollback();
// other clean-up goes here
return;
}
$this->db->commit();
当然,如果您需要先进行大量清理工作,return
,那么你原来的方法更好。特别是在这些情况下,我会考虑使用 PDO::ERRMODE_EXCEPTION。这有一些额外的好处,比如异常会自动回滚事务,除非它们被捕获。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)