在 PHP 的 Service 層實(shí)現(xiàn)事務(wù)管理,通常采用以下步驟:
在 Service 層的方法開始時,使用數(shù)據(jù)庫連接對象(如 MySQLi 或 PDO)開啟一個新的事務(wù)。例如,如果你使用的是 MySQLi,你可以這樣做:
$mysqli = new mysqli($servername, $username, $password, $dbname);
if ($mysqli->connect_error) {
die("連接失敗: " . $mysqli->connect_error);
}
$mysqli->begin_transaction(); // 開啟事務(wù)
在事務(wù)中執(zhí)行你的數(shù)據(jù)操作 SQL 語句。如果所有操作都成功,那么事務(wù)可以正常提交;如果有任何操作失敗,事務(wù)需要回滾。
// 示例 SQL 語句
$sql1 = "INSERT INTO users (username, email) VALUES ('John', 'john@example.com')";
$sql2 = "UPDATE accounts SET balance = balance - 100 WHERE user_id = 1";
if (!$mysqli->query($sql1)) {
echo "Error: " . $sql1 . "<br>" . $mysqli->error;
$mysqli->rollback(); // 回滾事務(wù)
exit;
}
if (!$mysqli->query($sql2)) {
echo "Error: " . $sql2 . "<br>" . $mysqli->error;
$mysqli->rollback(); // 回滾事務(wù)
exit;
}
如果所有 SQL 語句都成功執(zhí)行,那么你需要提交事務(wù)以使更改生效。
$mysqli->commit(); // 提交事務(wù)
在操作完成后,記得關(guān)閉數(shù)據(jù)庫連接。
$mysqli->close();
這是一個簡單的例子,實(shí)際項(xiàng)目中可能需要根據(jù)具體需求進(jìn)行調(diào)整。另外,也可以考慮使用 PHP 框架(如 Laravel、Symfony 或 Yii)來簡化事務(wù)管理。這些框架通常提供了更高級的事務(wù)控制功能,如自動提交、回滾和隔離級別設(shè)置等。