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
相关产品推荐
相关产品推荐

