Можно ли выполнить команду MySQL INSERT
за пределами MySQL TRANSACTION
?
Мне бы это понадобилось, потому что я регистрирую все ошибки в базе данных, и даже если другие MySQL
запросы должны быть откатаны при возникновении ошибки, ошибка все равно должна быть вставлена в базу данных.
Вот пример кода:
<?php
DB('main')->query("START TRANSACTION;");
$error = false;
for ($i=0; $i<10; $i++) {
$rand = rand(0, 10);
if ($rand < 5) {
$error = true;
DB('main')->query("INSERT INTO Errors SET ErrorText = 'There was an error'");
break;
}
DB('main')->query("INSERT INTO RandomTable SET RandomValue = '" . $rand . "'");
}
if ($error) {
DB('main')->query("ROLLBACK");
} else {
DB('main')->query("COMMIT");
}
При использовании этого кода в случае ошибки строка в таблице Errors
вообще не будет вставлена. Если я не использую TRANSACTIONS
, мне придется вручную удалить все строки, которые были вставлены до того, как произошла ошибка.
Мне известно, что я мог бы просто и просто поставить INSERT
ошибки после команды ROLLBACK
, но представьте себе, с 50 местами, где может возникнуть ошибка, каждая ошибка отличается.