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.