Erweiterte PHP-Datenbankverbindungen umfassen Transaktionen, Sperren und Parallelitätskontrolle, um die Datenintegrität sicherzustellen und Fehler zu vermeiden. Eine Transaktion ist eine atomare Einheit einer Reihe von Vorgängen, die über die Methoden beginTransaction(), commit() und rollback() verwaltet werden. Sperren verhindern den gleichzeitigen Zugriff auf Daten über PDO::LOCK_SHARED und PDO::LOCK_EXCLUSIVE. Die Parallelitätskontrolle koordiniert den Zugriff auf mehrere Transaktionen über MySQL-Isolationsstufen (Read Uncommitted, Read Committed, Repeatable Read, Serializable). In praktischen Anwendungen werden Transaktionen, Sperren und Parallelitätskontrolle für die Produktbestandsverwaltung auf Einkaufswebsites verwendet, um die Datenintegrität sicherzustellen und Bestandsprobleme zu vermeiden.
Bei der Interaktion mit Datenbanken mithilfe von PHP ist das Verständnis fortgeschrittener Konzepte wie Transaktionen, Sperren und Parallelitätskontrolle von entscheidender Bedeutung, um die Datenintegrität sicherzustellen und Fehler in Ihrer Anwendung zu vermeiden.
Eine Transaktion ist eine Sammlung von Datenbankoperationen, die als atomare Einheit ausgeführt werden. Dies bedeutet, dass alle Vorgänge in der Transaktion entweder alle erfolgreich sind oder alle fehlschlagen.
Verwenden Sie die Methoden beginTransaction()
, commit()
und rollback()
, um Transaktionen zu starten, festzuschreiben und zurückzusetzen: beginTransaction()
、commit()
和 rollback()
方法来启动、提交和回滚事务:
$db->beginTransaction(); try { // 执行数据库操作 $db->commit(); } catch (\Exception $e) { $db->rollback(); }
锁用于防止事务同时访问相同的数据库数据。PHP 的 PDO 提供了两种锁定模式:
PDO::LOCK_SHARED
:允许事务读取数据,但不能写入。PDO::LOCK_EXCLUSIVE
:允许事务读取和写入数据,但其他事务无法同时访问。要通过 query()
方法对表行进行锁定:
$stmt = $db->query('SELECT * FROM table WHERE id = 1 FOR UPDATE');
并发控制机制确保当多个事务同时访问数据库时不会发生数据冲突。MySQL 提供了以下隔离级别:
您可以在连接到数据库时通过 PDO::ATTR_DEFAULT_FETCH_MODE
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_TRANSACTION_ISOLATION, PDO::ISOLATION_READ_COMMITTED);
PDO::LOCK_SHARED
: ermöglicht Transaktionen das Lesen von Daten, aber nicht das Schreiben. PDO::LOCK_EXCLUSIVE
: Transaktionen dürfen Daten lesen und schreiben, andere Transaktionen können jedoch nicht gleichzeitig darauf zugreifen. query()
: // 启动事务 $db->beginTransaction(); // 锁定产品行 $stmt = $db->query('SELECT * FROM products WHERE id = :id FOR UPDATE'); $stmt->bindParam(':id', $productId); $stmt->execute(); // 获取产品数量 $product = $stmt->fetch(); $quantity = $product['quantity']; // 检查库存 if ($quantity <= 0) { $db->rollback(); throw new RuntimeException('Product is out of stock.'); } // 更新库存 $quantity--; $stmt = $db->prepare('UPDATE products SET quantity = :quantity WHERE id = :id'); $stmt->bindParam(':quantity', $quantity); $stmt->bindParam(':id', $productId); $stmt->execute(); // 提交事务 $db->commit();
PDO::ATTR_DEFAULT_FETCH_MODE
festlegen, wenn Sie eine Verbindung zur Datenbank herstellen: 🎜rrreee🎜Praktischer Fall🎜🎜Stellen Sie sich eine Online-Shopping-Website vor, auf der Benutzer dies tun können Produkt in den Warenkorb legen und kaufen. Um Probleme zu verhindern, wie z. B. das gleichzeitige Hinzufügen desselben Produkts zum Warenkorb durch mehrere Benutzer, können Transaktionen, Sperren und Parallelitätskontrolle verwendet werden, um die Datenintegrität sicherzustellen: 🎜rrreee🎜 Durch den Einsatz von Transaktionen, Sperren und Parallelitätskontrolle So können wir die Datenbankintegrität des Benutzers beim Kauf von Produkten sicherstellen und Bestandsprobleme vermeiden. 🎜Das obige ist der detaillierte Inhalt vonErweiterte PHP-Datenbankverbindungen: Transaktionen, Sperren und Parallelitätskontrolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!