Как использовать транзакцию mysql в WordPress? Я хочу удалить 10 дочерних, если один из них активен, общее удаление будет откатом.
Я никогда не пробовал, и нет ничего экстраординарного, но он просто запускает такой запрос: (Запустите ваши запросы после START TRANSACTION
и используйте COMMIT
или ROLLBACK
зависимости от результата):
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 }
Таким образом, он может быть преобразован в wordpress, используя что-то вроде этого
$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 }
Вы также можете использовать try catch
как этот ответ (не WordPress, но ту же идею). Вы можете больше узнать о $wpdb
запроса $wpdb
( query
и delete
) в Codex .
Механизм хранения MyISAM по умолчанию MySQL не поддерживает транзакции, поэтому это не вариант. Если вы хотите использовать транзакции, убедитесь, что все ваши таблицы определены как InnoDB.