2016-07-14 8 views
1

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?)

+2

'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

+1

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

+0

@RiggsFolly Yay zu verwenden. –

Antwort

1

Wenn Ihre Tabellen MYISAM sind, dann funktionieren Transaktionen nicht.

Allerdings bricht die mysql-API nicht, die transaktionalen Funktionen/Methoden werfen keine Fehler, sie scheinen nur normal zu funktionieren, außer dass jede Datenbankaktualisierung festgeschrieben wird.