2016-06-04 7 views
0

Ich habe einige Abfragen in einem Skript und ich möchte entweder alle oder keine von ihnen ausführen ..! Ich habe darüber gesucht und ich habe herausgefunden, dass ich Transaktion verwenden muss.Transaktion: commit() vs rollBack()

Eigentlich möchte ich PDO::beginTransaction verwenden. Jetzt gibt es zwei Ansätze.

Also, was ist der Unterschied zwischen ihnen? Beide scheinen mir identisch zu sein, also wann sollte ich welche verwenden?

<?php 

$dbh->beginTransaction(); 

$sth1 = $dbh->exec("DROP TABLE fruit"); 
$sth2 = $dbh->exec("UPDATE dessert SET name = 'hamburger'"); 
$sth3 = $dbh->exec("INSERT INTO names(id, name) VALUES (NULL, 'peter')"); 

// which one? 
$dbh->commit(); 
// or 
$dbh->rollBack(); 
// ?? 

/* Database connection is now back in autocommit mode */ 
?> 
+2

Stellen Sie sich vor Zurückrollen die Taste abbrechen und sich verpflichten, ist die Taste – JimL

Antwort

0

von ihnen beiden scheint mir identisch

, was falsch ist. Transaktion per Definition ist Atomic in der Natur bedeutet, entweder wird es passieren und erfolgreich ausgeführt werden alle Befehle in der Gruppe oder gar nicht. Wenn es erfolgreich ist und Sie die Änderung beibehalten möchten, dann COMMIT sonst, wenn eine der Anweisung in der Gruppe fehlschlägt dann ROLLBACK, um wieder in den ursprünglichen Zustand zu gelangen.

Also in Ihrem Fall möchten Sie alle folgenden Anweisung erfolgreich ausgeführt werden und wenn das dann COMMIT die Änderung persistieren, aber wenn eine der Anweisung aus irgendeinem Grund fehlschlägt, dann kann es enden, ein unerwünschtes Ergebnis zu geben die Sie nicht beibehalten möchten und so ROLLBACK und zurück zum vorherigen konsistenten Zustand gelangen.

$sth1 = $dbh->exec("DROP TABLE fruit"); 
$sth2 = $dbh->exec("UPDATE dessert SET name = 'hamburger'"); 
$sth3 = $dbh->exec("INSERT INTO names(id, name) VALUES (NULL, 'peter')"); 

über Transaction lesen und auch sehen dies ein weiterer Beitrag PHP + MySQL transactions examples

+0

speichern Was meinen Sie * „Wenn es erfolgreich ist und Sie die Änderung bestehen bleiben“ *? Noch weiß ich nicht, was ist der Unterschied .. – Shafizadeh

+0

@Shafizadeh, siehe in Antwort bearbeiten, wenn es hilft. – Rahul

+0

ok zuerst bitte sag mir ob ich beide in meinem skript von einem von ihnen benutzen soll? – Shafizadeh

0

Sie verwenden wollen, verpflichten, die Transaktion durchzuführen, und Rollback ist das Gegenteil, Sie Rollbacks verwenden, wenn Sie alle unverändert behalten wollen (zum Beispiel, wenn Sie einige Fehler bei irgendeinem Schritt der Transaktion erkannt haben).