2014-12-13 12 views
7

PDO bietet Funktionen zu initiieren, zu begehen, und Rollback-Transaktionen:PDO Transaktionsfunktionen vs MySQL Transaktionsanweisungen?

$dbh->beginTransaction(); 
$sth = $dbh->prepare(' 
    ... 
'); 
$sth->execute(); // in real code some values will be bound 
$dbh->commit(); 

Gibt es einen Grund, die PDO-Funktionen zu verwenden, um über die Transaktionsanweisungen in MySQL einfach mit? Das heißt:

$sth = $dbh->prepare(' 
    START TRANSACTION; 
    ... 
    COMMIT; 
'); 
$sth->execute(); // in real code some values will be bound 

UPDATE: Nur ein Hinweis auf jemand anderes in diese suchen, nach einigen Tests fand ich tatsächlich den zweiten Fall, der oben (unter Verwendung von START TRANSACTION und COMMIT in prepare()) in eine Ausnahme ausgelöst führen wird. Um also Transaktionen mit einer vorbereiteten Anweisung zu verwenden, müssen Sie die im ersten Fall gezeigten PDO-Funktionen verwenden.

Antwort

10

Aus Gründen der Portabilität ist es besser, die von PDO bereitgestellte Schnittstelle zu verwenden, falls Sie jemals mit einem anderen DBMS arbeiten oder ein anderes Teammitglied an ein anderes DBMS heranführen möchten.

Zum Beispiel SQLite uses a slightly different syntax; Wenn Sie von MySQL zu einer SQLite-Datenbank wechseln würden, müssten Sie jeden String in Ihrem PHP-Code ändern, der die Anweisung START TRANSACTION; enthält, da dies keine gültige Syntax für Ihre Datenbank mehr wäre. SQL Server 2014 ist ein anderes Beispiel, das diese Syntax nicht verwendet.

Natürlich, you can also use BEGIN; in MySQL, um eine Transaktion zu starten, und das würde in SQLite und SQL Server funktionieren. Du könntest das stattdessen benutzen.

Sie werden oft in der Lage sein, eine Syntax zu finden, die Ihnen gefällt und die einigermaßen portabel ist, aber warum sollten Sie die Zeit und Energie aufwenden, um darüber nachzudenken, wenn Sie es nicht müssen? Nutzen Sie die Tatsache, dass es a dozen PDO drivers gibt, die Ihnen das Leben leichter machen. Wenn Sie überhaupt Wert auf Konsistenz legen, bevorzugen Sie die API über implementierungsspezifische SQL-Syntax.

2

Der Unterschied zwischen der PDO und MySQL-Transaktion ist nichts. AUSSER

Sie können zum Beispiel Ihre Transaktion starten, einige Abfragen ausführen einige PHP-Code mehr Abfragen basierend auf Ihrem Code und so, und Sie können am Ende dieses Codes Rollback ausführen $PDO->rollback(); das ist viel einfacher als das Erstellen von 2 - 3 weitere Querys anstelle von $pdo->beginTransaction();

Auch mit $pdo->rollback(); ist ein paar Zeilen kürzer und meiner Meinung nach ist es auch klarer als das Erstellen einer anderen Abfrage und die Ausführung.

+0

Diese emulierte Transaktion ist manchmal nützlich, aber manchmal müssen Sie das Ergebnis z. Zuletzt ID aus einer Abfrage in der Transaktion einfügen. – Zaffy