Hier ist Struktur meines Skripts:Umleiten vor begehen Ausführung()
try {
$dbh_conn->beginTransaction();
$stmt1 = $dbh_conn->prepare("UPDATE ...");
$stmt1->execute(array($val1));
if (condition 1) {
$stmt2 = $dbh_conn->prepare("DELETE ...");
$stmt2->execute(array($val2));
header('location: ../page1');
exit;
} else {
header('location: ../page2');
exit;
}
$dbh_conn->commit();
} catch(PDOException $e) {
$dbh_conn->rollBack();
echo $e;
}
Es funktioniert erstaunlich .. Wie Sie dort sehen, ist if - else
Anweisung (immer einer von ihnen wird ausgeführt), die beiden Blöcke (beide if
und else
) haben eine exit;
. Auch $dbh_conn->commit();
Zeile ist danach if - else
Anweisung.
Eigentlich sollten nie diese beiden Abfragen ausgeführt werden. Denn es gibt exit;
vor commit()
. Aber beide Abfragen werden ebenfalls ausgeführt. Wie also kompiliert PHP mein Skript? Und meine Skriptstruktur ist in Ordnung? (keine Notwendigkeit, etwas zu ändern?)
'exit' Beendet ein Skript genau dort und dann! Aber wenn Sie AUTO-COMMIT gesetzt haben, dann werden Daten, außer Sie führen ein 'Rollback', ausgeführt – RiggsFolly
Tatsächlich gibt es eine andere Möglichkeit! Sind dies MYISAM-Tabellen, weil Transaktionen nicht mit MYISAM funktionieren, aber es Ihnen erlaubt, immer noch die Transaktionssyntax – RiggsFolly
@RiggsFolly Yay zu verwenden. –