115 lines
4.4 KiB
PHP
115 lines
4.4 KiB
PHP
<?php
|
|
// fix_meeting_db.php
|
|
// meeting_logs 테이블의 id 컬럼에 AUTO_INCREMENT 속성을 추가하고
|
|
// 중복된 id=0 레코드를 수정하는 스크립트
|
|
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
|
|
// DB 연결 설정
|
|
$host = '127.0.0.1';
|
|
$dbname = 'checker'; // .env를 로드하지 못할 경우를 대비한 기본값
|
|
$username = 'root';
|
|
$password = 'root';
|
|
|
|
echo "Database Fix Script for meeting_logs\n";
|
|
echo "=====================================\n";
|
|
|
|
// 1. .env 파일 로드 시도
|
|
$envPath = __DIR__ . '/../.env';
|
|
if (file_exists($envPath)) {
|
|
echo "Loading .env file...\n";
|
|
$lines = file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
|
foreach ($lines as $line) {
|
|
if (strpos($line, '#') === 0) continue;
|
|
list($name, $value) = explode('=', $line, 2);
|
|
$_ENV[trim($name)] = trim($value);
|
|
}
|
|
|
|
if (isset($_ENV['DB_HOST'])) $host = $_ENV['DB_HOST'];
|
|
if (isset($_ENV['DB_NAME'])) $dbname = $_ENV['DB_NAME'];
|
|
if (isset($_ENV['DB_USER'])) $username = $_ENV['DB_USER'];
|
|
if (isset($_ENV['DB_PASSWORD'])) $password = $_ENV['DB_PASSWORD'];
|
|
} else {
|
|
echo "Warning: .env file not found. Using default credentials.\n";
|
|
}
|
|
|
|
// 2. DB 연결
|
|
try {
|
|
echo "Connecting to database ($host, $dbname)...\n";
|
|
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
echo "Connected successfully.\n";
|
|
|
|
// 3. 중복된 ID 확인 (id=0)
|
|
echo "Checking for duplicate id=0 in meeting_logs...\n";
|
|
$stmt = $pdo->query("SELECT COUNT(*) FROM meeting_logs WHERE id = 0");
|
|
$count = $stmt->fetchColumn();
|
|
echo "Found $count records with id=0.\n";
|
|
|
|
if ($count > 0) {
|
|
// 4. MAX(id) 확인
|
|
$stmt = $pdo->query("SELECT MAX(id) FROM meeting_logs");
|
|
$maxId = $stmt->fetchColumn();
|
|
if (!$maxId) $maxId = 0;
|
|
echo "Current MAX(id) is $maxId.\n";
|
|
|
|
// 5. id=0인 레코드들 업데이트
|
|
$stmt = $pdo->query("SELECT * FROM meeting_logs WHERE id = 0");
|
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
$newId = $maxId + 1;
|
|
foreach ($rows as $row) {
|
|
// 중복된 id=0 레코드를 삭제하고 새로운 ID로 다시 삽입하는 것이 안전함
|
|
// (PRIMARY KEY 제약 조건 때문에 UPDATE가 실패할 수 있음)
|
|
|
|
// 데이터 복사
|
|
$insertSql = "INSERT INTO meeting_logs (tenant_id, user_id, title, audio_file_path, transcript_text, summary_text, created_at, file_expiry_date)
|
|
VALUES (:tenant_id, :user_id, :title, :audio_file_path, :transcript_text, :summary_text, :created_at, :file_expiry_date)";
|
|
|
|
$insertStmt = $pdo->prepare($insertSql);
|
|
$insertStmt->execute([
|
|
':tenant_id' => $row['tenant_id'],
|
|
':user_id' => $row['user_id'],
|
|
':title' => $row['title'],
|
|
':audio_file_path' => $row['audio_file_path'],
|
|
':transcript_text' => $row['transcript_text'],
|
|
':summary_text' => $row['summary_text'],
|
|
':created_at' => $row['created_at'],
|
|
':file_expiry_date' => $row['file_expiry_date']
|
|
]);
|
|
|
|
echo "Moved record (old id=0) to new id=" . $pdo->lastInsertId() . "\n";
|
|
}
|
|
|
|
// 원래 id=0 레코드 삭제
|
|
$pdo->exec("DELETE FROM meeting_logs WHERE id = 0");
|
|
echo "Deleted old records with id=0.\n";
|
|
}
|
|
|
|
// 6. AUTO_INCREMENT 속성 추가
|
|
echo "Applying AUTO_INCREMENT to meeting_logs.id...\n";
|
|
try {
|
|
$pdo->exec("ALTER TABLE meeting_logs MODIFY id INT AUTO_INCREMENT PRIMARY KEY");
|
|
echo "Success: AUTO_INCREMENT applied.\n";
|
|
} catch (PDOException $e) {
|
|
// 이미 설정되어 있거나 다른 문제가 있는 경우
|
|
echo "Note: " . $e->getMessage() . "\n";
|
|
|
|
// PRIMARY KEY가 이미 있다면 MODIFY만 시도
|
|
try {
|
|
$pdo->exec("ALTER TABLE meeting_logs MODIFY id INT AUTO_INCREMENT");
|
|
echo "Success: Mofified column to AUTO_INCREMENT.\n";
|
|
} catch (PDOException $e2) {
|
|
echo "Error applying AUTO_INCREMENT: " . $e2->getMessage() . "\n";
|
|
}
|
|
}
|
|
|
|
echo "Done.\n";
|
|
|
|
} catch (PDOException $e) {
|
|
echo "Database Error: " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|
|
?>
|