我在数据库中有大约400个项目,每个项目都有6-8个.jpeg存储在一个目录中,并以项目的ID命名(即项目1234 ---> 1234_1.jpg,1234_2.jpg等。 )。 长话短说,我需要更改数据库中的所有项ID。然后我需要对jpegs做同样的事情,以便它们匹配。
我担心在循环遍历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++;
}
答案 0 :(得分:1)
有400条记录,不可能超时。 (如果你真的想要,你可以调用set_time_limit(0),但我怀疑它是否必要。)请务必先复制你的桌子,这样你就不会丢失你的映射。你的重命名并没有按计划进行。
答案 1 :(得分:0)
这种方法很好。
我不明白为什么你会遇到任何麻烦。
只要这样做,如果你有问题,然后就会诊断出来。