所以有2个InnoDB表,员工和公司。我使用 try/catch 块在事务中插入 2 个查询。但是,当我在第一个查询中犯了一个明确的错误(我输入了一个不正确的表名,员工而不是员工)时,数据库当然不会插入该查询的行,但是第二个查询运行并被提交给数据库而不是回滚(因为第一个查询插入失败)。
结果是emply employees 表,但company 表带有新记录。我在这里想念什么?由于没有插入第一个查询,它不应该回滚吗?
$employee_id = 2;
$employee_name = 'Marky Mark';
try {
$dbh->beginTransaction();
$query = "INSERT INTO employee (employee_name) VALUES (:employee_name)";
$insert_emp = $dbh->prepare($query);
$insert_emp->execute(array(':employee_name' => $employee_name));
$Employee_id = $dbh->lastInsertId();
$query = "INSERT INTO companies (company_name,employee_id) VALUES ('SO',:Employee_id)";
$insert_emp_comp = $dbh->prepare($query);
$insert_emp_comp->execute(array(':Employee_id' => $Employee_id));
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " . $e->getMessage();
}