网站是否被k,广告营销推广方案,如何自己做一个网页,修改wordpress主页标题好的,我正在寻找使用PHP在MySQL中进行“嵌套”事务的解决方案,并且正如您在MySQL文档中所知的那样,不可能在事务内进行事务(Mysql transactions within transactions).我试图使用http://php.net/manual/en/pdo.begintransaction.php中建议的Database类,但不幸的是,这对我来说是…好的,我正在寻找使用PHP在MySQL中进行“嵌套”事务的解决方案,并且正如您在MySQL文档中所知的那样,不可能在事务内进行事务(Mysql transactions within transactions).我试图使用http://php.net/manual/en/pdo.begintransaction.php中建议的Database类,但不幸的是,这对我来说是错误的,因为它的计数器范围是对象级别而不是类级别,为了解决此问题,我创建了具有计数器(名为$nest)的此类(TransactionController)静态的,它带来了使事务“线性”(带有“线性”)所需的类级别我说的是它显然是嵌套的,但是如果您看起来它不是嵌套的,那么事务将运行良好,您认为呢 (最后看例子,车主)class TransactionController extends \\PDO {public static $warn_rollback_was_thrown false;public static $transaction_rollbacked false;public function __construct(){parent :: __construct( ... connection info ... );}public static $nest 0;public function reset(){TransactionController :: $transaction_rollbacked false;TransactionController :: $warn_rollback_was_thrown false;TransactionController :: $nest 0;}function beginTransaction(){$result null;if (TransactionController :: $nest 0) {$this-reset();$result parent :: beginTransaction();}TransactionController :: $nest;return $result;}public function commit(){$result null;if (TransactionController :: $nest 0 !TransactionController :: $transaction_rollbacked !TransactionController :: $warn_rollback_was_thrown) {$result parent :: commit();}TransactionController :: $nest--;return $result;}public function rollback(){$result null;if (TransactionController :: $nest 0) {if (TransactionController :: $nest 0) {$result parent :: rollback();TransactionController :: $transaction_rollbacked true;}else {TransactionController :: $warn_rollback_was_thrown true;}}TransactionController :: $nest--;return $result;}public function transactionFailed(){return TransactionController :: $warn_rollback_was_thrown true;}// to force rollback you can only do it from $nest 0public function forceRollback(){if (TransactionController :: $nest 0) {throw new \PDOException();}}}class CarData extends TransactionController {public function insertCar(){try {$this-beginTransaction();... (operations) ...$this-commit();}catch (\PDOException $e) {$this-rollback();}}}class PersonData extends TransactionController {public function insertPerson( $personnull ){try {$this-beginTransaction();... (operations) ...$this-commit();}catch (\PDOException $e) {$this-rollback();}}}class CarOwnerData extends TransactionController {public function createOwner(){try {$this-beginTransaction();$car new CarData();$car-insertCar();$person new PersonData();$person-insertPerson();... (operations) ...$this-commit();}catch (\PDOException $e) {$this-rollback();}}}$sellCar new CarOwnerData();$sellCar-createOwner();UPDATE1静态属性$warn_rollback_was_thrown已添加到TransactionController,以警告事务在执行的某个时刻失败,但没有回滚.UPDATE2当事务在某个时刻失败时,您可以使用forceRollback()让代码仍然运行到最后或最终停止它,例如,请参见以下代码public function insertMultiplePersons( $arrayPersons ){try {$this-beginTransaction();if (is_array( $arrayPersons )) {foreach ($arrayPersons as $k $person) {$this-insertPerson( $person );if ($this-transactionFailed()) {$this-forceRollback();}}}$this-commit();}catch (\PDOException $e) {$this-rollback();}} ?