You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据数据表记录ID批量删除关联的多张图片?

解决删除文章时无法删除对应所有图片的问题

你的问题出在只获取了匹配文章ID的第一张图片记录,所以只删除了单张图片。要删除所有关联图片,需要遍历images表中所有匹配id2='$id'的记录,逐个删除对应的文件。

另外,你的代码存在SQL注入风险,直接把$_GET['id']拼进SQL语句里非常不安全,建议改用预处理语句来避免这个问题。

修改后的代码如下:

<?php
include('assets/system/core.php');

// 先验证ID的合法性,避免非法输入
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    header("LOCATION: " . $web_settings['weblink'] . "mispropiedades.php");
    exit;
}

$id = (int)$_GET['id'];

// 用预处理语句查询所有关联图片
$stmt = mysqli_prepare($db, "SELECT file_name FROM images WHERE id2 = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

// 循环遍历所有图片记录,逐个删除文件
while ($registro = mysqli_fetch_assoc($result)) {
    $ruta = $registro['file_name'];
    $filePath = "uploads/" . $ruta;
    // 先检查文件是否存在,避免unlink报错
    if (file_exists($filePath)) {
        unlink($filePath);
    }
}

// 执行数据库删除操作(同样改用预处理语句更安全)
$stmt = mysqli_prepare($db, "DELETE FROM amenidades WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);

$stmt = mysqli_prepare($db, "DELETE FROM images WHERE id2 = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);

$stmt = mysqli_prepare($db, "DELETE FROM propiedades WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);

$stmt = mysqli_prepare($db, "DELETE FROM visit_days WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);

$stmt = mysqli_prepare($db, "DELETE FROM comments WHERE prpdad_id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);

header("LOCATION: " . $web_settings['weblink'] . "mispropiedades.php");
exit;
?>

关键修改点:

  • 增加了ID合法性校验,避免非法输入
  • 使用预处理语句替代直接拼接SQL,彻底解决SQL注入风险
  • 用while循环遍历所有关联图片记录,逐个删除对应的文件
  • 删除文件前先检查文件是否存在,避免因文件缺失导致的报错

内容的提问来源于stack exchange,提问作者Aland Ramirez Araiza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:22:13