0
因此,有2個InnoDB表,員工和公司。我使用try/catch塊在事務中插入2個查詢。然而,當我在第一個查詢中犯了一個明顯的錯誤時(我把一個不正確的表名,員工而不是員工),數據庫當然不插入該查詢的行,但第二個查詢運行並被提交給數據庫而不是回滾(因爲第一個查詢未能被插入)。PDO交易提交而不是回滾
結果是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();
}
Obvoiusly執行不會拋出異常,因爲代碼執行到公司插入語句 – 2012-04-13 18:30:04