我想以更好的方式解决的问题是删除包含带标签的图像的文件夹。因此,我需要删除每个图像
- 图像本身
来自三个数据库的图像的标签(img_offer,img_member,img_horses)
目前我获取要删除的文件夹的所有图像ID,然后使用四个不同的查询迭代这四次,这看起来非常低效。
主要问题是,据我所知,您不能同时打开多个准备语句,并且在每次迭代中创建新语句似乎也是违反直觉的。
我认为最好的方法是多次查询准备语句,但我找不到类似的东西,所以也许有人知道如何以更清洁的方式解决这个问题
我的想法就像是
<webContainer deferServletLoad="false"/>
但是我认为这不会起作用,因为预准备语句中不支持多个SQL查询,或者它们是不是?
这是我目前的代码:
$multiplePreparedStatement= "DELETE this FROM that WHERE id=?;
DELETE this2 FROM that2 WHERE id2=?;
DELETE this3 FROM that3 WHERE id3=?;";
$preparedStmt = $conn->prepare($multiplePreparedStatement);
foreach($imgArray as $imgId){
$preparedStmt->bind_param("iii", $imgId, $imgId, $imgId);
$preparedStmt->execute();
}
$preparedStmt->close();
我也有创建多个连接的想法,但我认为如果可能的话,可能会出现问题。删除图像时,我仍然有一个迭代图像的查询。
答案 0 :(得分:0)
您根本不必迭代image_id
(至少不是SQL数据)。您可以一次性从数据库中删除与特定folder_id
相关的所有内容:
DELETE Images, Images_Offers, Images_Horses, Images_Team
FROM Images
LEFT JOIN Images_Offers ON Images_Offers.image_id = Images.image_id
LEFT JOIN Images_Horses ON Images_Horses.image_id = Images.image_id
LEFT JOIN Images_Team ON Images_Team.image_id = Images.image_id
WHERE folder_id = ?;
原因是,在此之前你应该unlink
实际文件。