我在数据库中大约有 400 个项目,每个项目在一个目录中存储了 6-8 个 .jpeg,并以项目的 ID 命名(即项目 1234 ---> 1234_1.jpg、1234_2.jpg 等)。长话短说,我需要更改数据库中的所有项目 ID。然后,我需要对 jpeg 执行相同的操作,以便它们匹配。
我担心在循环遍历 400 条记录时使用 rename() 函数会导致超时,或者这可能不是最有效的方法。
有人有其他解决方案或技巧吗?提前感谢!
$img_dir = $_SERVER["DOCUMENT_ROOT"]."/images/items/";
$newID = 3001;
$getItems = $pdo->query("SELECT * FROM items ORDER BY RAND()");
while ($row = $getItems->fetch()){
$currentID = $row["id"];
// UPDATE TABLE 1
$update = $pdo->query("UPDATE items SET old_id = $currentID, new_id = $newID WHERE id=$currentID");
// UPDATE TABLE 2
$update2 = $pdo->query("UPDATE items_assoc SET item_id = $newID WHERE item_id=$currentID");
// UPDATE JPEGS
if (file_exists($img_dir."originals/".$currentID."_1.jpg")){
rename($img_dir."originals/".$currentID."_1.jpg",$img_dir."originals/".$newID."_1.jpg");
rename($img_dir."650/".$currentID."_1.jpg",$img_dir."650/".$newID."_1.jpg");
rename($img_dir."220/".$currentID."_1.jpg",$img_dir."220/".$newID."_1.jpg");
rename($img_dir."100/".$currentID."_1.jpg",$img_dir."100/".$newID."_1.jpg");
}
if (file_exists($img_dir."originals/".$currentID."_2.jpg")){
rename($img_dir."originals/".$currentID."_2.jpg",$img_dir."originals/".$newID."_2.jpg");
rename($img_dir."650/".$currentID."_2.jpg",$img_dir."650/".$newID."_2.jpg");
rename($img_dir."220/".$currentID."_2.jpg",$img_dir."220/".$newID."_2.jpg");
rename($img_dir."100/".$currentID."_2.jpg",$img_dir."100/".$newID."_2.jpg");
}
if (file_exists($img_dir."originals/".$currentID."_3.jpg")){
rename($img_dir."originals/".$currentID."_3.jpg",$img_dir."originals/".$newID."_3.jpg");
rename($img_dir."650/".$currentID."_3.jpg",$img_dir."650/".$newID."_3.jpg");
rename($img_dir."220/".$currentID."_3.jpg",$img_dir."220/".$newID."_3.jpg");
rename($img_dir."100/".$currentID."_3.jpg",$img_dir."100/".$newID."_3.jpg");
}
$newID++;
}
对于 400 条记录,不太可能超时。(如果你真的愿意,你可以打电话给set_time_limit(0),但我怀疑这是没有必要的。请务必先复制表,以便在重命名未按计划进行时不会丢失映射。
这种方法很好。
我不明白你为什么会遇到任何麻烦。
只要这样做,如果你有问题,然后诊断出来。