嵌套Sql查询函数对PHP事务的影响?
我将编写一个长sql事务,并考虑编写可重用的sql函数,所以我的问题是,我可以用这种方式编写事务吗嵌套Sql查询函数对PHP事务的影响?,php,mysql,transactions,Php,Mysql,Transactions,我将编写一个长sql事务,并考虑编写可重用的sql函数,所以我的问题是,我可以用这种方式编写事务吗 try { // First of all, let's begin a transaction $db->beginTransaction(); // A set of queries; if one fails, an exception should be thrown $db->query('first query'); UpdateE
try {
// First of all, let's begin a transaction
$db->beginTransaction();
// A set of queries; if one fails, an exception should be thrown
$db->query('first query');
UpdateEmp();
//anothre sql query function, i put him in another function so that i
//can use it seperately
$db->query('second query');
UpdateProject();
$db->query('third query');
// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();
} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}
而其他sql函数将类似于
function UpdateEmp(){
//separate sql queries for emplyee update
UpdateEmpProject();//nested sql query function
//Do any db error will stop and rollback the trasaction?
}
function UpdateEmpProject(){
//sepeate sql queries for emplyee update
}
我的问题是,如果UpdateEmp函数中发生任何错误,事务是否会回滚?假设UpdateEmp()还包含另一个带有sql查询的函数,那么嵌套查询也会影响事务结果?可以,这就是它的doneWill事务检测db异常并回滚所有工作的方式?如果PDO设置为
->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_exception)代码>并且您捕获(PDOException)而不是Exception否它不工作。当嵌套查询失败时,它不会回滚。