You need to enable JavaScript to run this app. PHP中如何单次操作同时删除数据库记录和对应文件夹内的图片?
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何单次操作同时删除数据库记录和对应文件夹内的图片?

实现删除产品同时清理对应图片的方案

核心逻辑说明

你当前的products表已经存储了product_image字段(对应代码中调用的$product['product_image'],值为图片的访问路径),天然已经实现了产品id和对应图片的关联,不需要额外调整表结构,只要修改后台删除产品的执行逻辑即可。

具体操作步骤

  • 后台接收到待删除的产品id后,不要直接执行DELETE语句删除数据库记录,先执行查询操作,取出对应id产品的product_image字段值
  • 将拿到的图片相对路径拼接为服务器本地的绝对路径,用file_exists()判断文件真实存在后,调用unlink()删除该图片文件
  • 图片删除完成后,再执行DELETE语句删除数据库中的产品记录

参考代码示例

// 接收传参并做整数转换,避免SQL注入风险
$delete_id = intval($_POST['delete_product_id']);

// 1. 查询待删除产品的图片路径
$img_sql = $conn->prepare("SELECT product_image FROM products WHERE id = ?");
$img_sql->bind_param("i", $delete_id);
$img_sql->execute();
$img_res = $img_sql->get_result();
$product_info = $img_res->fetch_assoc();
// 拼接成服务器文件绝对路径,可根据你实际的项目路径调整规则
$server_img_path = $_SERVER['DOCUMENT_ROOT'] . '/' . ltrim($product_info['product_image'], '/');
$img_sql->close();

// 2. 存在对应图片则先删除
if (file_exists($server_img_path)) {
    unlink($server_img_path);
}

// 3. 删除数据库中的产品记录
$del_sql = $conn->prepare("DELETE FROM products WHERE id = ?");
$del_sql->bind_param("i", $delete_id);
$del_sql->execute();
$del_sql->close();

// 后续可以跳转回产品列表页,或者返回删除成功的响应
header("Location: /admin/product_list.php");
exit;

注意事项

  • 操作前建议先备份数据库和产品图片文件夹,避免误删导致数据丢失
  • 如果你的图片存储在第三方云存储服务中,不能用本地的unlink()方法,需要调用对应云服务提供的删除接口
  • 做好权限校验,只有管理员权限的账号才能执行删除操作,避免恶意删除数据

内容的提问来源于stack exchange,提问作者Phillips

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:36:03