後台管理系統常見需求:列表頁面通過複選框選中多條記錄,點擊批量刪除按鈕一次性刪除選中的數據。
0; });
if (empty($ids)) {
die("無有效的 ID 可刪除");
}
// 3. 構建 SQL - 使用 IN 子句
$idList = implode(',', $ids);
$sql = "DELETE FROM `your_table` WHERE `id` IN ($idList)";
// 4. 執行刪除
$link = mysql_connect('localhost', 'root', 'password');
mysql_select_db('your_db', $link);
$result = mysql_query($sql, $link);
// 5. 結果反饋
if ($result) {
$affected = mysql_affected_rows($link);
echo "成功刪除 $affected 條記錄";
echo "
執行的 SQL: $sql";
} else {
echo "刪除失敗: " . mysql_error($link);
}
mysql_close($link);
}
?>
$ids = [1, 2, 3];
$idList = implode(',', $ids); // "1,2,3"
$sql = "DELETE FROM table WHERE id IN ($idList)";
// 多層防護
$ids = array_map('intval', $_POST['checkbox']); // 1. 強制整數
$ids = array_filter($ids); // 2. 過濾空值
$idList = implode(',', $ids); // 3. 安全拼接
// 結果 SQL 完全可控,無注入風險
function batchDelete($ids, $batchSize = 1000) {
$totalDeleted = 0;
$chunks = array_chunk($ids, $batchSize);
foreach ($chunks as $chunk) {
$idList = implode(',', $chunk);
$sql = "DELETE FROM `table` WHERE `id` IN ($idList)";
mysql_query($sql);
$totalDeleted += mysql_affected_rows();
}
return $totalDeleted;
}
mysql_query("START TRANSACTION");
try {
$sql = "DELETE FROM `table` WHERE `id` IN ($idList)";
mysql_query($sql);
mysql_query("COMMIT");
} catch (Exception $e) {
mysql_query("ROLLBACK");
throw $e;
}
// 不物理刪除,只標記
$sql = "UPDATE `table` SET `deleted_at` = NOW(), `deleted_by` = $adminId WHERE `id` IN ($idList)";
// 好處:可恢復、保留關聯數據、審計追蹤
PDO::ERRMODE_EXCEPTION,
]);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$ids = $_POST['checkbox'] ?? [];
$ids = array_filter(array_map('intval', $ids));
if (empty($ids)) {
exit(json_encode(['success' => false, 'msg' => '無有效ID']));
}
// 動態生成占位符 ?,?,?
$placeholders = implode(',', array_fill(0, count($ids), '?'));
$sql = "DELETE FROM `your_table` WHERE `id` IN ($placeholders)";
$stmt = $pdo->prepare($sql);
$stmt->execute($ids);
exit(json_encode([
'success' => true,
'deleted' => $stmt->rowCount(),
'sql' => $sql
]));
}
?>