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

Reply via email to