인사 정보 동기화 시작 (PDO 방식)"; echo "총 대상 인원: {$total_count}명

"; // 1. PDO Prepared Statement 준비 (위치 보유자 '?' 사용) $sql = "CALL proc_edu_users_in(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $stmt = $conn->prepare($sql); $SET_injection_at = date('Y-m-d H:i:s'); foreach ($user_list as $row) { // 데이터 정리 (null 처리) $params = [ $row['member_id'] ?? '', $row['sys_comp_code'] ?? '', $row['name'] ?? '', $row['dept_name'] ?? '', $row['rank_name'] ?? '', (!empty($row['join_date'])) ? $row['join_date'] : null, $row['belong_comp'] ?? '', $row['working_comp'] ?? '', $row['intra_pw'] ?? '', $row['auth_level'] ?? '', (!empty($row['end_date'])) ? $row['end_date'] : null, $row['intro_flag'] ?? '0', $row['belong_comp_id'] ?? '', $row['working_comp_id'] ?? '', $row['created_at'] ?? date('Y-m-d H:i:s'), $row['updated_at'] ?? date('Y-m-d H:i:s'), $SET_injection_at // injection_at ]; // 2. 실행 (PDO는 execute에 배열을 바로 넣으면 바인딩됩니다) try { if ($stmt->execute($params)) { $success_count++; // 대량 데이터 처리 시 진행 상황 출력 (100명 단위) if ($success_count % 1000 == 0) { echo "현재 {$success_count}명 처리 중...
"; flush(); // 화면에 즉시 반영 } } else { $error_count++; } } catch (PDOException $e) { $error_count++; // 프로시저 내부 에러 로그는 테이블에 쌓이겠지만 PHP 에러도 확인용 출력 echo "에러(ID: " . ($row['member_id'] ?? 'unknown') . "): " . $e->getMessage() . "
"; } } // --------------------------------------------------------- // 로그 파일 생성 및 저장 로직 (한글 깨짐 방지 적용) // --------------------------------------------------------- $log_dir = $_SERVER['DOCUMENT_ROOT'] . "/edu/log/"; $log_file_name = "users_info_batch_" . date('Y') . ".txt"; $log_path = $log_dir . $log_file_name; // 폴더 생성 if (!is_dir($log_dir)) { mkdir($log_dir, 0777, true); } // 로그 내용 구성 $new_log_entry = "주입일자= {$SET_injection_at} , 성공카운트 = {$success_count} , 실패카운트= {$error_count}" . PHP_EOL; // UTF-8 BOM (한글 깨짐 방지용 식별코드) $bom = "\xEF\xBB\xBF"; if (file_exists($log_path)) { // 기존 내용을 읽어옴 $existing_content = file_get_contents($log_path); // 기존 내용에 BOM이 이미 있다면 제거 (내용 결합 시 중복 방지) $existing_content = str_replace($bom, '', $existing_content); // [BOM] + [새 로그] + [기존 로그] 순서로 저장 file_put_contents($log_path, $bom . $new_log_entry . $existing_content); } else { // 파일이 처음 생성될 때 BOM과 함께 저장 file_put_contents($log_path, $bom . $new_log_entry); } // --------------------------------------------------------- // --------------------------------------------------------- echo "
"; echo "처리 완료!
"; echo "성공: {$success_count}건 / 실패: {$error_count}건"; /* 해당파일 처리완료후 로그파일 생성 생성위치 /edu/log/ 폴더아래 users_info_batch_2026.txt 파일을 생성하여 저장한다 파일명 마지막은 현재년도가 들어간 파일명이다. 해당폴더에 파일이 없을 경우 생성 파일이 존재시 파일에 있는 로그내용 위에 새로운 로그내용을 추가한다. 추가될 내용은 주입일자= $SET_injection_at , 성공카운트 = $success_count , 실패카운트= $error_count */ ?>