How to use mysql transaction in wordpress?

2019-02-09 08:02发布

问题:

How to use mysql transaction in wordpress? I want delete 10 child, if one is active, the total delete will be rollback.

回答1:

I've never tried it and there is nothing extra ordinary but it's just about running a query like (Run your queries after START TRANSACTION and use COMMIT or ROLLBACK depending on the result) :

mysql_query('START TRANSACTION');
$res1 = mysql_query('query1');
$res2 = mysql_query('query2');
If ( $res1 && $res2 ) {
    mysql_query('COMMIT'); // commits all queries
} else {
    mysql_query('ROLLBACK'); // rollbacks everything
}

So, it could be converted to wordpress, using something like this

$wpdb->query('START TRANSACTION');
$result1 = $wpdb->delete( $table, $where, $where_format = null );
$resul2 = $wpdb->delete( $table, $where, $where_format = null );
if($result1 && $result2) {
    $wpdb->query('COMMIT'); // if you come here then well done
}
else {
    $wpdb->query('ROLLBACK'); // // something went wrong, Rollback
}

You may also use try catch like this answer, (not WordPress but same idea). You can read more about $wpdb query functions (query and delete) on Codex.

MySQL’s default MyISAM storage engine does not support transactions, so it’s not an option. If you want to use transactions, ensure all your tables are defined as InnoDB.