setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "--- ๐Ÿ›  ์‹ฌ์ธต ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ์‹œ์ž‘ ---\n"; // 1. ์Šคํ‚ค๋งˆ ๊ฐ•์ œ ๋ณด์ • $newColumns = [ 'disposal_recipient' => 'TEXT', 'disposal_date' => 'TEXT', 'real_user' => 'TEXT', 'disposal_user_id' => 'INTEGER' ]; foreach ($newColumns as $col => $type) { try { $db->exec("ALTER TABLE laptop_assets ADD COLUMN $col $type"); echo "โœ… ์ปฌ๋Ÿผ ๋ณด์ •: $col\n"; } catch (PDOException $e) { // Already exists or other error } } // 2. ์ธ์ฝ”๋”ฉ ๋ณต๊ตฌ (URL-Encoded ๋ฐ์ดํ„ฐ๊ฐ€ ์‹๋ณ„๋˜์–ด ์ˆ˜์ • ์‹œ๋„) $stmt = $db->query("SELECT id, assigned_user_name, disposal_recipient FROM laptop_assets"); $assets = $stmt->fetchAll(PDO::FETCH_ASSOC); $fixCount = 0; $updateStmt = $db->prepare("UPDATE laptop_assets SET assigned_user_name = ?, disposal_recipient = ? WHERE id = ?"); foreach ($assets as $asset) { $uName = $asset['assigned_user_name']; $dRec = $asset['disposal_recipient']; $newUName = $uName; $newDRec = $dRec; // URL ์ธ์ฝ”๋”ฉ ํƒ์ง€ ๋ฐ ๋ณ€ํ™˜ if ($uName && strpos($uName, '%') !== false) { $newUName = urldecode($uName); } if ($dRec && strpos($dRec, '%') !== false) { $newDRec = urldecode($dRec); } if ($newUName !== $uName || $newDRec !== $dRec) { $updateStmt->execute([$newUName, $newDRec, $asset['id']]); $fixCount++; } } echo "โœ… Mojibake/URL-Encoding ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ: {$fixCount}๊ฑด ์ˆ˜์ • ์™„๋ฃŒ.\n"; // 3. STOCK ์ž์‚ฐ ๋ช…์น™ ๋™๊ธฐํ™” $stmtStock = $db->prepare("UPDATE laptop_assets SET assigned_user_name = '์—…๋ฌด์šฉ(TEMP_44666b)', current_user_id = NULL WHERE status = 'stock'"); $stmtStock->execute(); echo "โœ… ์žฌ๊ณ (STOCK) ๋ช…์นญ ๋™๊ธฐํ™” ์™„๋ฃŒ.\n"; echo "--- ๐ŸŽ‰ ๋ชจ๋“  ๋ณต๊ตฌ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ---"; } catch (Exception $e) { echo "โŒ ์˜ค๋ฅ˜: " . $e->getMessage() . "\n"; } ?>