How can a PHP PDO object figure out if it's already in a MySQL Transaction?

mR.blaCk

New Member
I have two complicated PHP objects, each of which has data in a few MySQL tables.Sometimes, I just need to remove one object A from the database, and that takes 3 SQL statements.Sometimes, I need to remove one object B from the database, which is takes 4 SQL statements, and which also needs to find and remove all of the object A's that object B owns.So inside the function delete_A(), I execute those statements inside of a transaction. Inside of the function that delete_B(), I want to run one great big transaction that covers the activities inside of delete_A(). If the whole atom of deleting a B fails, I need to restore all of its A's in the rollback.How do I update the definition of delete_A() to only open a new transaction if there isn't already a bigger transaction running.I expected to be able to do something like this, but the \[code\]autocommit\[/code\] attribute doesn't appear to get changed by \[code\]beginTransaction()\[/code\]\[code\]function delete_A($a){ global $pdo; $already_in_transaction = !$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT); if(!$already_in_transaction){ $pdo->beginTransaction(); } //Delete the A if(!$already_in_transaction){ $pdo->commit(); }}function delete_B($b){ global $pdo; $pdo->beginTransaction(); foreach($list_of_As as $a){ delete_A($a); } $pdo->commit();}\[/code\]
 
Back
Top