首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

PHP 封裝數據庫操作類:一個方法實現多表批量刪除

     編輯:程式設計疑難解答

需求場景

同一數據庫下多張表結構相似,需批量刪除不同表中指定 ID 的記錄。避免為每張表重複編寫 SQL,追求代碼復用。

解決方案:封裝通用刪除方法

class Data {
    private $pdo;
    public function __construct() {
        $this->pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
    }
    // 通用刪除:表名 + ID 數組
    public function delete($table, array $ids) {
        if (empty($ids)) return 0;
        $placeholders = implode(',', array_fill(0, count($ids), '?'));
        $sql = "DELETE FROM `$table` WHERE `id` IN ($placeholders)";
        $stmt = $this->pdo->prepare($sql);
        return $stmt->execute($ids);
    }
}

// 使用示例
$db = new Data();
$db->delete('table1', [1,2,3,4,5]);
$db->delete('table2', [1,2,3,4,5]);

關鍵點

  • 預處理語句:防止 SQL 注入,提升批量執行性能。
  • 動態表名:表名無法參數化,需嚴格驗證或白名單過濾(如 in_array($table, ['table1','table2'])),防止注入風險。
  • 事務支持:多表關聯刪除時,建議在外層開啟事務 $pdo->beginTransaction() 保證原子性。

擴展建議

將更多 CRUD 操作封裝為基類 BaseModel,具體表模型繼承並指定 protected $table = 'xxx',進一步減少樣板代碼,邁向輕量級 ORM 雛形。

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