Sprawy PHP PDO i auto-commit
Podręcznik PHP PDO referencyjny
Teraz podłączony poprzez PDO poszedł przed rozpoczęciem kwerendy, należy najpierw zrozumieć, jak PDO jest zarządzanie sprawami.
Obsługa transakcji cztery właściwości (kwas):
- Atomowość (niepodzielność)
- Spójność (Spójność)
- Izolacja (Isolation)
- Trwałe (trwałość)
Mówiąc prościej, jakiekolwiek operacje wykonywane w ramach transakcji, a nawet stopniowe wdrażanie, ale także do zapewnienia bezpieczeństwa stosuje się do bazy danych, a nie zostaną przedłożone w czasie zakłóceń od innych połączeń.
operacje transakcyjne mogą być również automatycznie odwołane na życzenie (przy założeniu, że nie zostały jeszcze złożone), który ułatwia obsługę błędów w skrypcie.
Transakcja jest zwykle wykonywane przez szereg zmian "oszczędności" w górę, a następnie pozwolono wejść w życie i wdrożone; korzyści takiego działania jest zapewnienie skuteczności tych może być w znacznym stopniu zmienione.
Innymi słowy, transakcje mogą skrypty szybciej i potencjalnie bardziej wytrzymałe (trzeba jeszcze z nich korzystać właściwie czerpać te korzyści).
Niestety, nie wszystkie bazy danych obsługuje transakcje, więc kiedy po raz pierwszy otworzyć połączenia PDO wymaga tak zwanej "auto-commit" tryb pracy.
Auto-commit tryb oznacza, że jeśli wsparcie dla baz danych, każdy prowadzony kwerenda ma własną niejawny transakcji, jeśli baza danych nie obsługuje transakcji, nie.
Jeśli potrzebujesz transakcję, należy użyć metody PDO :: beginTransaction (), aby rozpocząć. Jeśli kierowca będący nie obsługuje transakcji, rzucić PDOException wyjątku (niezależnie od tego, jakiego rodzaju ustawienia obsługi błędów, jest to poważny stan błędu).
Gdy transakcja jest dostępna PDO :: commit () lub PDO :: rollback (), aby zakończyć, w zależności od kodu transakcyjnego działa poprawnie.
Uwaga: tylko PDO czy możliwość przetwarzania transakcji w inspekcji warstwy kierowcy. Jeśli jakiś warunek wykonawczego oznacza, że transakcja ta nie jest dostępna, i obsługa baz danych przyjmuje wniosek o wszczęcie transakcji, PDO :: beginTransaction () nadal będzie zwracać TRUE i błędów. Spróbuj użyć transakcji jest dobrym przykładem w tabelach MyISAM bazy danych MySQL.
Gdy skrypt zakończony lub połączenie ma zostać zamknięte, jeśli nie jest zakończona transakcji, PDO automatycznie cofnąć transakcję. Ten środek zabezpieczający pomaga uniknąć nieścisłości w scenariuszu kończy się nieoczekiwanie - jeśli nie wprost popełnienia transakcję, to założenie jest błędne gdzieś, więc przywracania zostanie przeprowadzona w celu zapewnienia bezpieczeństwa danych.
Uwaga: Tylko uruchom transakcję PDO :: beginTransaction () później, może się zdarzyć automatycznie wycofana. Jeśli ręcznie wydać zapytanie do rozpoczęcia transakcji, PDO nie może wiedzieć, tak że w razie potrzeby, nie może zostać wycofana.
W transakcji wykonując partię:
W poniższym przykładzie, załóżmy, że stworzenie zestawu wpisów dla nowych pracowników, przypisać identyfikator 23 IS. Oprócz podstawowych danych rejestracyjnych danej osoby, ale także trzeba nagrać swoją pensję.
Obie aktualizacje są zakończone jest bardzo proste, ale przez zamknięcie PDO :: metody beginTransaction () i PDO :: commit () połączenia, możliwe jest, aby upewnić się, że przed wprowadzeniem zmian, inni ludzie nie widzą te zmiany.
Jeśli wystąpi błąd, zapadka blokuje wszystkie zmiany, ponieważ transakcja została cofnięte od samego początku, i wysyła komunikat o błędzie.
<?php try { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Connected\n"; } catch (Exception $e) { die("Unable to connect: " . $e->getMessage()); } try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); } ?>
nie ogranicza się do zmian w tej transakcji, może to wydawać skomplikowane zapytania do danych, ale także do budowy kolejnych zmian i zapytanie oparciu o tę informację, kiedy transakcja jest aktywna, można zapewnić, że inni nie mogą wprowadzać zmiany w funkcjonowaniu w toku.