Это кажется довольно простым вопросом, но я не мог найти окончательных ответов, специфичных для MySQL. Посмотри на это:
$mysqli->autocommit(false); //Start the transaction $success = true; /* do a bunch of inserts here, which will be rolled back and set $success to false if they fail */ if ($success) { if ($mysqli->commit()) { /* display success message, possibly redirect to another page */ } else { /* display error message */ $mysqli->rollback(); //<----------- Do I need this? } } $mysqli->autocommit(true); //Turns autocommit back on (will be turned off again if needed) //Keep running regardless, possibly executing more inserts
Дело в том, что большинство примеров, которые я видел, просто заканчивают сценарий, если коммит завершился неудачно, либо разрешив ему закончить, либо явно вызвав exit()
, который, по-видимому, автоматически откатывает транзакцию (?), Но что, если мне нужно продолжать работать и возможно, позже выполните другие операции по изменению базы данных? Если этот коммит не удался, и у меня не было такого отката, снова включил автосообщение (которое в соответствии с этим комментарием в записи руководства PHP на $mysqli->commit()
ожидающие операции) или даже явно вызывает другой $mysqli->commit()
позже on, попытайтесь зафиксировать предыдущие вставки снова, так как они не удались раньше, и они не были отброшены назад?
Надеюсь, я был достаточно ясен, и я могу получить окончательный ответ на этот вопрос, который довольно сильно меня прослушивал.
Изменить: Хорошо, может быть, я сформулировал свой вопрос неправильно в этом комментарии. Дело не в том, нужен ли мне откат, который, как было указано, будет зависеть от моего варианта использования, но действительно, каков эффект наличия или отсутствия откат в этой строке. Возможно, более простой вопрос заключался бы в следующем: выполняет ли неудавшийся вызов commit
отложенные операции или просто оставляет их в состоянии ожидания, ожидая откат или другой фиксации?