diff --git a/developer/version_control.php b/developer/version_control.php index bf52809..ace71dd 100644 --- a/developer/version_control.php +++ b/developer/version_control.php @@ -198,43 +198,64 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_version'])) { // 初始化消息变量 $message = ''; - // 获取文件路径 - $getFilePathSql = "SELECT file_path FROM app_versions WHERE id = ?"; - $getFileStmt = $conn->prepare($getFilePathSql); - if (!$getFileStmt) { - log_error("获取文件路径查询准备失败: " . $conn->error, __FILE__, __LINE__); - $message = '版本删除失败,请稍后再试'; - } else { + // 开始事务 + $conn->begin_transaction(); + + try { + // 1. 获取文件路径 + $filePath = ''; + $getFilePathSql = "SELECT file_path FROM app_versions WHERE id = ?"; + $getFileStmt = $conn->prepare($getFilePathSql); + + if (!$getFileStmt) { + throw new Exception("获取文件路径查询准备失败: " . $conn->error); + } + $getFileStmt->bind_param("i", $versionId); $getFileStmt->execute(); $fileResult = $getFileStmt->get_result(); + if ($fileResult->num_rows > 0) { $fileRow = $fileResult->fetch_assoc(); $filePath = __DIR__ . '/../' . $fileRow['file_path']; - - // 删除文件 - if (file_exists($filePath)) { - if (!unlink($filePath)) { - log_error("文件删除失败: " . $filePath, __FILE__, __LINE__); - $message = '版本删除失败,请稍后再试'; - } + } + + // 2. 从数据库删除版本记录 + $deleteVersionSql = "DELETE FROM app_versions WHERE id = ?"; + $deleteVersionStmt = $conn->prepare($deleteVersionSql); + + if (!$deleteVersionStmt) { + throw new Exception("版本删除查询准备失败: " . $conn->error); + } + + $deleteVersionStmt->bind_param("i", $versionId); + + if (!$deleteVersionStmt->execute()) { + throw new Exception("版本删除执行失败: " . $conn->error); + } + + // 检查是否有记录被删除 + if ($deleteVersionStmt->affected_rows === 0) { + throw new Exception("未找到要删除的版本记录"); + } + + // 3. 如果数据库删除成功,尝试删除文件(即使文件删除失败也不回滚数据库操作) + if (!empty($filePath) && file_exists($filePath)) { + if (!unlink($filePath)) { + log_error("文件删除失败: " . $filePath, __FILE__, __LINE__); + // 文件删除失败不影响数据库操作,继续处理 } } - } - - // 从数据库删除版本记录 - $deleteVersionSql = "DELETE FROM app_versions WHERE id = ?"; - $deleteVersionStmt = $conn->prepare($deleteVersionSql); - if (!$deleteVersionStmt) { - log_error("版本删除查询准备失败: " . $conn->error, __FILE__, __LINE__); - $message = '版本删除失败,请稍后再试'; - } else { - $deleteVersionStmt->bind_param("i", $versionId); - if ($deleteVersionStmt->execute()) { - $message = '版本删除成功'; - } else { - $message = '版本删除失败: ' . $conn->error; - } + + // 提交事务 + $conn->commit(); + $message = '版本删除成功'; + + } catch (Exception $e) { + // 回滚事务 + $conn->rollback(); + log_error("版本删除异常: " . $e->getMessage(), __FILE__, __LINE__); + $message = '版本删除失败: ' . $e->getMessage(); } // 只输出消息,不包含任何HTML