Es gibt also 2 InnoDB-Tabellen, Mitarbeiter und Firmen. Ich verwende einen try/catch-Block, um 2 Abfragen in eine Transaktion einzufügen. Wenn ich jedoch bei der ersten Abfrage einen expliziten Fehler mache (ich habe einen falschen Tabellennamen eingegeben, Mitarbeiter statt Mitarbeiter), fügt die Datenbank natürlich nicht die Zeilen für diese Abfrage ein, aber die zweite Abfrage wird ausgeführt und an die Datenbank statt Rollback (da die erste Abfrage nicht eingefügt werden konnte).PDO Transaktion statt Rollback
Das Ergebnis ist ein Mitarbeiter-Tabelle, aber Unternehmen Tabelle mit dem neuen Datensatz. Was fehlt mir hier? Sollte es nicht zurückgesetzt werden, da die erste Abfrage nicht eingefügt wurde?
$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();
}
Obvoiciously führt keine Ausnahme aus, da der Code bis zur Anweisung des Unternehmens ausgeführt wird –