Matthew Oatham wrote: > Hi, > > Is there an elegant way to recover from DB errors in MySQL using PHP, > i.e. transactions and rolling back - basically I have an insert > statement then an update statement. if the insert succeeds the update > is run but if the update fails I want to undo the insert! > > Any suggestions, I guess I could get the last inserted row id and > perform an sql delete but is there a more elegant way? > > Cheers > > Matt
Though I know there are many people out there who cringe at the thought of using DB abstraction layers, I really like ADOdb and it has very nice transaction support built in (as long as the underlying database supports it, obviously). $conn->BeginTrans(); $commit = false; $query = 'select col1, col2 from table 1'; $rs = $conn->Execute($query) ? true : false; $commit = $rs ? true : false; $query = 'insert into table1 (col1, col2) values (col1, col2)'; $commit = $commit == true && $conn->Execute($query) ? true : false; $query = 'insert into table2 (col1, col2) values (col1, col2)'; $commit = $commit == true && $conn->Execute($query) ? true : false; $query = 'insert intod table3 (col1, col2) values (col1, col2)'; $commit = $commit == true && $conn->Execute($query) ? true : false; $commit == true ? $conn->BeginTrans() : $conn->RollbackTrans(); None of the above will be committed since there is a syntax error in the third query. HTH. Pablo -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php