PDO事务提交而不是回滚

Mav*_*ick 0 mysql pdo innodb transactions commit

所以有2个InnoDB表,员工和公司.我使用try/catch块在事务中插入2个查询.然而,当我做出明确的错误在第一个查询(我把一个不正确的表名员工,而不是雇员),数据库不插入的当然是查询中的行,但第二个查询运行,并得到承诺的数据库而不是回滚(因为第一个查询未能插入).

结果是一个emply员工表,但公司表与新记录.我在这里错过了什么?它不应该回滚,因为没有插入第一个查询?

$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();
}
Run Code Online (Sandbox Code Playgroud)

jnr*_*bsn 5

默认情况下,PDO不会抛出异常.您必须将其配置为抛出异常:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)

有关PDO如何处理错误的更多信息,请查看此页面.