prepare("SELECT poster_path, ticket_path, photo_path FROM movies WHERE id = ?"); $stmt->execute([$id]); $movie = $stmt->fetch(); // 取一行就够,但游标不关的话这条连接会一直挂着共享读锁, // 后面删评价 / 删电影要升级成写锁时就会被自己挡住(PDO 默认等 60 秒,表现成页面卡死)。 $stmt->closeCursor(); if ($movie) { // 删除海报、票根、旧单张照片 foreach (['poster_path', 'ticket_path', 'photo_path'] as $field) { deleteStoredFile($movie[$field]); } // 删除多张照片(新表) $stmt2 = $db->prepare("SELECT photo_path FROM movie_photos WHERE movie_id = ?"); $stmt2->execute([$id]); $photos = $stmt2->fetchAll(); foreach ($photos as $p) { deleteStoredFile($p['photo_path']); } // 删除这部电影的评价与评价下的讨论 // (SQLite 默认没开 PRAGMA foreign_keys,reviews 上的 ON DELETE CASCADE 不会生效,必须手动清) // 传 $db 进去复用本连接:读写都在一条连接上,不会互相等锁。 deleteReviewsOfMovie($id, $db); // 删除电影(viewers 和 movie_photos 会自动级联删除) $stmt = $db->prepare("DELETE FROM movies WHERE id = ?"); $stmt->execute([$id]); } header('Location: index.php'); exit;