高度な PHP データベース接続には、データの整合性を確保し、エラーを回避するためのトランザクション、ロック、同時実行制御が含まれます。トランザクションは一連の操作の原子単位であり、beginTransaction()、commit()、および rollback() メソッドを通じて管理されます。ロックにより、PDO::LOCK_SHARED および PDO::LOCK_EXCLUSIVE を介したデータへの同時アクセスが防止されます。同時実行制御は、MySQL 分離レベル (非コミット読み取り、コミット読み取り、反復可能読み取り、シリアル化可能) を通じて複数のトランザクションへのアクセスを調整します。実際のアプリケーションでは、トランザクション、ロック、同時実行制御がショッピング Web サイトの製品在庫管理に使用され、データの整合性を確保し、在庫の問題を回避します。
PHP を使用してデータベースと対話する場合、データの整合性を確保し、アプリケーションでのエラーを回避するために、トランザクション、ロック、同時実行制御などの高度な概念を理解することが重要です。
トランザクションは、アトミック単位として実行されるデータベース操作のコレクションです。これは、トランザクション内のすべての操作がすべて成功するかすべて失敗することを意味します。
beginTransaction()
、commit()
、および rollback()
メソッドを使用して、トランザクションを開始、コミット、ロールバックします: 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
: トランザクションによるデータの読み取りは許可されますが、書き込みは許可されません。 PDO::LOCK_EXCLUSIVE
: トランザクションはデータの読み取りと書き込みを許可されますが、他のトランザクションが同時にデータにアクセスすることはできません。 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
オプションを使用して分離レベルを設定できます: 🎜rrreee🎜実際的なケース🎜🎜 ユーザーが商品をカートに追加してご購入ください。複数のユーザーが同時に同じ商品をショッピング カートに追加するなどの問題を防ぐために、トランザクション、ロック、同時実行制御を使用してデータの整合性を確保できます: 🎜rrreee🎜 トランザクション、ロック、同時実行制御を使用することにより、製品を購入するときにユーザーのデータベースの整合性を確保し、在庫の問題を回避できます。 🎜以上が高度な PHP データベース接続: トランザクション、ロック、同時実行制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。