首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP MySQL 批量刪除實現:Checkbox 表單提交與 IN 查詢優化

     編輯:PHP 相關知識

需求場景

後台管理系統常見需求:列表頁面通過複選框選中多條記錄,點擊批量刪除按鈕一次性刪除選中的數據。

前端表單構建

項目 1
項目 2
項目 3

後端處理邏輯

 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); } ?>

關鍵技術點解析

1. 數組參數名 `checkbox[]`

  • HTML 中 `name="checkbox[]"` 使 PHP 自動將同名輸入合併為數組
  • 提交後 `$_POST['checkbox']` 為 `[1, 2, 3]` 格式

2. `implode()` 構建 IN 列表

$ids = [1, 2, 3];
$idList = implode(',', $ids); // "1,2,3"
$sql = "DELETE FROM table WHERE id IN ($idList)";

3. 安全性保障

// 多層防護
$ids = array_map('intval', $_POST['checkbox']);  // 1. 強制整數
$ids = array_filter($ids);                        // 2. 過濾空值
$idList = implode(',', $ids);                     // 3. 安全拼接
// 結果 SQL 完全可控,無注入風險

進階優化方案

大量 ID 分批處理

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;
}

事務包裝(InnoDB)

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 實現

 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
    ]));
}
?>

前端增強體驗



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved