Transakcje PDO PHP
Jest to tutorial dotyczący korzystania z transakcji za pomocą PDO w PHP. Transakcje są przydatne wtedy gdy chcemy wykonać wiele powiązanych ze sobą zapytań. W niektórych scenariuszach możesz chcieć upewnić się, że wszystkie kwerendy zostały pomyślnie wykonane przed zatwierdzeniem zmian w bazie danych. Na przykład: Drugie zapytanie nie powinno zostać wykonane, jeśli pierwsze zapytanie zakończy się niepowodzeniem.
<?php /** * Connect to MySQL and instantiate the PDO object. * Set the error mode to throw exceptions and disable emulated prepared statements. */ $pdo = new PDO('mysql:host=localhost;dbname=nazwa_bazy', 'user', 'pass', array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false )); $userId = 1; $amount = 100; //We start our transaction. $pdo->beginTransaction(); try{ //Query 1: Attempt to insert the payment record into our database. $sql = "INSERT INTO payments (user_id, amount) VALUES (:user_id, :amount)"; $stmt = $pdo->prepare($sql); $stmt->execute(array( ':user_id' => $userId, ':amount' => $amount, ) ); //Query 2: Attempt to update the user's profile. $sql = "UPDATE users SET paymentsum = paymentsum + :amount WHERE id = :user_id"; $stmt = $pdo->prepare($sql); $stmt->execute(array( ':amount' => $amount, ':user_id' => $userId ) ); //We've got this far without an exception, so commit the changes. $pdo->commit(); } //Our catch block will handle any exceptions that are thrown. catch(Exception $e){ //An exception has occured, which means that one of our database queries //failed. //Print out the error message. echo $e->getMessage(); //Rollback the transaction. $pdo->rollBack(); }