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