Transaction management helps keep your data safe and correct when you make multiple changes at once.
0
0
Transaction management in PHP
Introduction
When you need to save several related changes to a database together.
When you want to make sure either all changes happen or none at all.
When updating money or important records that must not be lost or broken.
When you want to avoid errors causing partial updates in your data.
Syntax
PHP
<?php $pdo->beginTransaction(); // run queries $pdo->commit(); // or if error $pdo->rollBack(); ?>
Use beginTransaction() to start a transaction.
Use commit() to save all changes if everything is fine.
Examples
Starts a transaction, inserts a user, then saves the change.
PHP
<?php
$pdo->beginTransaction();
$pdo->exec("INSERT INTO users (name) VALUES ('Alice')");
$pdo->commit();
?>Transfers money between accounts safely. If any update fails, it cancels all changes.
PHP
<?php $pdo->beginTransaction(); try { $pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1"); $pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2"); $pdo->commit(); } catch (Exception $e) { $pdo->rollBack(); } ?>
Sample Program
This program creates two accounts, then safely transfers 200 from Alice to Bob using a transaction. If anything goes wrong, it cancels the transfer.
PHP
<?php $pdo = new PDO('sqlite::memory:'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Create table $pdo->exec("CREATE TABLE accounts (id INTEGER PRIMARY KEY, name TEXT, balance INTEGER)"); // Insert initial data $pdo->exec("INSERT INTO accounts (name, balance) VALUES ('Alice', 500), ('Bob', 300)"); try { $pdo->beginTransaction(); // Alice sends 200 to Bob $pdo->exec("UPDATE accounts SET balance = balance - 200 WHERE name = 'Alice'"); $pdo->exec("UPDATE accounts SET balance = balance + 200 WHERE name = 'Bob'"); $pdo->commit(); echo "Transaction completed successfully.\n"; } catch (Exception $e) { $pdo->rollBack(); echo "Transaction failed: " . $e->getMessage() . "\n"; } // Show final balances $stmt = $pdo->query("SELECT name, balance FROM accounts"); foreach ($stmt as $row) { echo $row['name'] . ': ' . $row['balance'] . "\n"; }
OutputSuccess
Important Notes
Always set error mode to PDO::ERRMODE_EXCEPTION to catch errors easily.
Use rollBack() to undo changes if something goes wrong.
Transactions work only if your database supports them (like MySQL InnoDB, PostgreSQL, SQLite).
Summary
Transaction management groups multiple database changes into one safe action.
Use beginTransaction(), commit(), and rollBack() to control transactions.
This helps keep your data correct and avoids partial updates.