是否可以在access_control
之外运行access_control:
- { path: ^/$, role: ROLE_BASE_USER }
命令?
我需要这样做,因为我正在记录数据库中的所有错误,并且即使发生错误也应回滚其他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
命令之后,但是可以想象一下,在50个可能发生错误的地方,每个错误都不同。 / p>
答案 0 :(得分:2)
方案C:使用第二条与MySQL的连接只是为了记录错误。
在这种情况下,请使用autocommit=ON
而不使用BEGIN..COMMIT
。这样,将立即插入“日志”记录。
答案 1 :(得分:1)
如何将错误推送到堆栈中并稍后保存?
DB('main')->query("START TRANSACTION;");
$error = false;
$errors = [];
for ($i=0; $i<10; $i++) {
$rand = rand(0, 10);
if ($rand < 5) {
$error = true;
$errors[] = "There was an error with ".$rand;
break;
}
DB('main')->query("INSERT INTO RandomTable SET RandomValue = '" . $rand . "'");
}
if ($error) {
DB('main')->query("ROLLBACK");
DB('main')->query("INSERT INTO Errors (ErrorText) values (...)", $errors );
} else {
DB('main')->query("COMMIT");
}