2012-04-13 9 views
0

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(); 
} 
+0

Obvoiciously führt keine Ausnahme aus, da der Code bis zur Anweisung des Unternehmens ausgeführt wird –

Antwort

5

PDO löst standardmäßig keine Ausnahmen aus. Sie müssen es so konfigurieren, Ausnahmen zu werfen:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

prüfen this page out für weitere Informationen darüber, wie PDO Fehler behandelt.

Verwandte Themen